プロが教える店舗&オフィスのセキュリティ対策術

質問へのアドバイスありがとうございます。現状Z列まで可能でした。当該のマクロをコピペします。
Sub Sample()
Dim i As Long, X As Long
Dim R1 As String, R2 As String
i = 1: X = 1
Application.ScreenUpdating = False
Do While Range("Sheet1!A" & i).Value <> "" 'Sheet1の行移動ループ
R1 = "": R2 = "C"
Do While Range("Sheet1!" & R1 & R2 & i).Value <> "" 'Sheet1の列移動ループ
Range("Sheet2!A" & X).Value = Range("Sheet1!A" & i).Value
Range("Sheet2!B" & X).Value = Range("Sheet1!B" & i).Value
Range("Sheet2!C" & X).Value = Range("Sheet1!" & R1 & R2 & i).Value
If R2 = "Z" Then '列移動コード
If R1 <> "" Then
R1 = Chr(Asc(R1) + 1)
Else
R1 = "A"
End If
Else
R2 = Chr(Asc(R2) + 1)
End If
X = X + 1 'Sheet2の次の行へ
Loop
i = i + 1 'Sheet1の次の行へ
Loop
Application.ScreenUpdating = True
MsgBox ("完了")
End Sub

A 回答 (3件)

こんにちは



すでに指摘がでていますけれど・・

ご提示のコードの
>If R2 = "Z" Then '列移動コード
以降で、列の移動を行っているようですが、
もともとが列の制御をアルファベット1文字と決め打ちしているので、そのままのロジックだと、単純に列を増加させると、Z列以降は(本来はAA,AB,AC・・・列)が、[列,\列・・・のような存在しない列名称になってしまいます。

列の制御を2文字以上でも可能にして、X,Y,Z,AA,AB,AC・・・となるような制御にしてあげれば、そのままでも利用できますが、そのような制御をするのは却って面倒です。
素直に、列番号(=数値)を利用する方法にするか、基準となるセルをRangeで取得してOffsetなどで制御してゆく方法に変えてしまう方が、遥かにわかりやすく、かつ、簡単になると考えられます。
    • good
    • 0

このコードは捨てた方が良いです。

絶対、捨てるべきです(きっぱり!!)。
前回の質問に、新しい回答(No.4)が付いているようですが読みましたか?
そのアドバイスに従って、書き直してください。
    • good
    • 0

これは元の質問に補足として追記したほうが良いと思います。


これでは新規の質問なのでちんぷんかんぷんです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!