Kondense Sekvensiell verdier til en enkelt rad

November 17  by Eliza

Rusty har en liste over postnumre i en kolonne av et regneark. Han ønsker en måte å "komprimere" kodene slik at sekvensielle verdiområder er på en enkelt rad. Så, for eksempel, i stedet for 35013, 35014 og 35015 tar opp tre rader, vil de vises på en enkelt rad som 35013-35015.

Det er et par måter å gå om dette-med eller uten makroer. På "uten makroer" side av gjerdet, finnes det en rekke forskjellige metoder, og alle disse involverer bruken av flere kolonner for å holde mellomresultater.

For eksempel, la oss anta at du har dine data i kolonne A, som starter i celle A2, og at celle A1 er tom (det trenger ikke engang ha header tekst i det). I dette tilfellet kan du skrive inn følgende formel i celle B2:

= HVIS (NOT (A2-A1 = 1), A2, IF (A3-A2 = 1, B1, A2))

Deretter, i celle C2, skriver du inn følgende lang formel:

= HVIS (NOT (A3-A2 = 1), IF (A2-A1 = 1, TEKST (B1, "00000")
& "-" & TEKST (B2, "00000"), TEKST (A2, "00000")), "")

Nå kan du kopiere formlene i cellene B2: C2 ned sine respektive kolonner. Hva du ender opp med i kolonne C er kondensert serie postnummer. Du kan kopiere disse verdiene, ved hjelp av Lim inn for å ignorere tomme celler, til hvor som helst annet du ønsker.

Hvis du vil bruke en makro tilnærming, så er det ingen mellomliggende kolonner nødvendig. En makro kan skrives som i hovedsak kollapser listen over postnumre på plass. Følgende makro sløyfer gjennom hva celleområdet du valgte og skaper den kondenserte listen:

Sub CombineValues ​​()
Dim RNG Som Range
Dim Rceii Som Range
Dim sNewArray () As String
Dim x Som Long
Dim y Som Long
Dim sStart As String
Dim Send som String

Satt RNG = Selection
sStart = rng.Cells (1)
Send = sStart
y = 1
For x = 1 Til rng.Count - 1
Hvis rng.Cells (x + 1) - _
rng.Cells (x)> 1 Then 'End
ReDim Bevar sNewArray (1 Til y)
Hvis sStart = deretter Send
sNewArray (y) = sStart
Else
sNewArray (y) = sStart & "-" & Send
End If
sStart = rng.Cells (x + 1)
y = y + 1
End If
Send = rng.Cells (x + 1)
ReDim Bevar sNewArray (1 Til y)
Hvis sStart = deretter Send
sNewArray (y) = sStart
Else
sNewArray (y) = sStart & "-" & Send
End If
Neste
rng.ClearContents
For x = 1 Til y
rng.Cells (x) = "'" & sNewArray (x)
Neste
Satt RNG = Nothing
Satt Rceii = Nothing
End Sub

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (3853) gjelder for Microsoft Excel 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Excel (Excel 2007 og senere) her: Kondense Sekvensiell verdier til en enkelt rad.