ここから本文です

エクセルのデータ処理の方法について質問です。 例えば、A列1行目から10行目に ...

ks1********さん

2019/7/317:57:58

エクセルのデータ処理の方法について質問です。

例えば、A列1行目から10行目に
「1」「2」「3」「4」「7」「10」「11」「14」「15」「18」とデータが入っていた場合、
「1-4,7,10-11,14-15

,18」のように連番になっている箇所は連番の始めと終わりの数字を「-」で記述し、数字が飛んでいる箇所は「,」で記述して1セルに出力したいです。

VBAを使ってもいいので、何か良い方法がありましたら教えて頂けると幸いです。

よろしくお願い致します。

補足皆様、ご回答ありがとうございます。
回答して頂いた内容を試せる環境にしばらくいないのでBAを選ぶのに時間がかかってしまいますが、申し訳ございません。

閲覧数:
62
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tai********さん

2019/7/323:55:20

出力セルが書いていませんが、一つのセルに横に表示すると見にくいのでC1セルを結合してセル内改行して表示しています。



Sub Sample()
Dim i As Long, k As Long, f As String, FF As String, N()
ReDim N(0)
N(0) = CStr(Cells(1, 1))
k = 1
f = CStr(Cells(1, 1))
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 1) <> Cells(i - 1, 1) + 1 And Cells(i, 1) <> Cells(i + 1, 1) - 1 Then
ReDim Preserve N(k)
N(k) = Cells(i, 1) & ","
k = k + 1
ElseIf Cells(i, 1) = Cells(i - 1, 1) + 1 And Cells(i, 1) <> Cells(i + 1, 1) - 1 Then
ReDim Preserve N(k)
N(k) = f & "-" & Cells(i, 1)
k = k + 1
ElseIf Cells(i, 1) <> Cells(i - 1, 1) + 1 And Cells(i, 1) = Cells(i + 1, 1) - 1 Then
f = CStr(Cells(i, 1))
End If
Next
FF = Join(N, Chr(10))
Cells(1, 3).Resize(UBound(N)).Merge
Cells(1, 3) = Mid(FF, 3)
End Sub

出力セルが書いていませんが、一つのセルに横に表示すると見にくいのでC1セルを結合してセル内改行して表示しています。...

質問した人からのコメント

2019/7/10 00:49:49

皆様ご回答ありがとうございました。
こちらの回答を参考にコードを少し弄りましたら自分のやりたかったことが上手くできました。

ベストアンサー以外の回答

1〜1件/1件中

30246kikuさん

2019/7/410:32:39

雰囲気、以下でどうなりますか


Option Explicit

Public Sub Samp1()
   Dim vA As Variant
   Dim sS As String
   Dim i As Long, j As Long, k As Long, n As Long
   Const CSP As String = "-"
   Const CDM As String = ","

   With Range("A1", Cells(Rows.Count, "A").End(xlUp))
      vA = .Value
      n = 0: i = 1: sS = ""
      While (i <= UBound(vA))
         n = n + 1
         vA(n, 1) = vA(i, 1)
         k = vA(n, 1)
         For j = i + 1 To UBound(vA)
            If (vA(j, 1) <> k + 1) Then Exit For
            k = k + 1
         Next
         If (j > i + 1) Then vA(n, 1) = vA(n, 1) & CSP & k
         sS = sS & CDM & vA(n, 1)
         i = j
      Wend

      Application.ScreenUpdating = False
      With .Offset(, 2)
         .ClearContents
         .NumberFormatLocal = "@"
         .Resize(n).Value = vA
         .Cells(1, 2).Value = Mid(sS, Len(CDM) + 1)
      End With
      Application.ScreenUpdating = True
   End With
End Sub

雰囲気、以下でどうなりますか


Option Explicit

Public Sub Samp1()...

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる