基本的に、TextToColumns 関数を使用して、同じセル内のセミコロンで区切られたデータを分離しています。問題は、この関数を実行する必要がある 2 列のデータがあり、上書きせずにデータを挿入する必要があることです。
(VBAとExcelを初めて使用する場合は簡単に行ってください)これは私が現在持っているものです:
Sub Button1_Click()
Dim rng As Range
Dim sh As Worksheet
Set sh = Worksheets("Sheet1")
With sh
Set rng = .[Q1]
Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp))
num = Application.WorksheetFunction.Max(Columns("P"))
rng.Offset(0, 1).Resize(1, num).EntireColumn.Insert
rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
End With
Set sh2 = Worksheets("Sheet1")
With sh2
num2 = Application.WorksheetFunction.Max(Columns("P"))
Dim lastColumn As Integer
lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count
MsgBox Replace(Cells(1, lastColumn).Address(False, False), "1", "")
MsgBox lastColumn
Set rng = .[W1]
Set rng = .Range(rng, .Cells(.Rows.Count, rng.Column).End(xlUp))
rng.TextToColumns Destination:=rng, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
End With
End Sub
わかりましたので、修正しようとしているのは、2 番目の部分で rng を手動で W1 に設定することです。rng は次の空の列である必要があります。そのため、MsgBox を使用する lastColumn は列「W」を返しますが、それを rng (型の不一致) に設定することはできません。ああ、num変数は、挿入する必要がある列の量に設定されています。私のデータは次のようになります。
カウント | の列; データは分離する必要があります | の列; データは分離する必要があります
5 | セミコロンで区切られた 5 セットのデータ | これはシートの終わりなので気にしないでください
これを行う簡単な方法はありますか?私も近いですか?