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

Sub 自動()
Dim i As Long, j As Long, k As Long
Dim tbl As Variant
Dim stbl As Variant
Dim tmp As String
Application.ScreenUpdating = False
'シートBBを配列に入れる
With Worksheets("AA")
tbl = .Range("A1:E" & .Cells(Rows.Count, 1).End(xlUp).Row)
End With
'シートAAのN列にセット
With Worksheets("BB")
For i = 1 To .Cells(Rows.Count, "D").End(xlUp).Row
For j = 1 To UBound(tbl)
If .Range("D" & i).Value = tbl(j, 1) Then
tmp = .Range("E" & i).Value
stbl = Split(tbl(j, 3), " ")
For k = 0 To UBound(stbl)
Select Case InStr(tmp, "/")
Case 0
If InStr(stbl(k), tmp) > 0 Then
.Range("N" & i).Value = tbl(j, 2)
.Range("O" & i).Value = tbl(j, 4)
.Range("P" & i).Value = tbl(j, 5)
Exit For
End If
Case Else
If InStr(stbl(k), Left(tmp, InStr(tmp, "/") - 1)) > 0 Or _
InStr(stbl(k), Mid(tmp, InStr(tmp, "/") + 1, Len(tmp) - InStr(tmp, "/"))) > 0 Then
.Range("N" & i).Value = tbl(j, 2)
.Range("O" & i).Value = tbl(j, 4)
.Range("P" & i).Value = tbl(j, 5)
Exit For
End If
End Select
Next k
End If
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub

このマクロで、列の変更をしたいのです。

(AA)のシートの変えたい所
D列→B列
E列→C列
N列→L列
O列→M列
P列→N列

(BB)のシートの変えたい所

A列→C列
C列→B列
B列→A列
D列→D列
E列→E列

と変えたいのですがマクロ初心者で作って頂いたものなのでどこをどう変えれば良いのかわかりません。列指定がどれなのかもわからず、できれば解説にて教えて頂けるとありがたいです。
よろしくお願いいたします。

A 回答 (1件)

Sub 自動()


Dim i As Long, j As Long, k As Long
Dim tbl As Variant
Dim stbl As Variant
Dim tmp As String
Application.ScreenUpdating = False
'シートBBを配列に入れる
With Worksheets("BB") ' AA→BB
tbl = .Range("A1:E" & .Cells(Rows.Count, 3).End(xlUp).Row) ' (BB)A列→C列
End With
'シートAAのN列にセット
With Worksheets("AA") ' BB→AA
For i = 1 To .Cells(Rows.Count, "B").End(xlUp).Row ' (AA)D列→B列
For j = 1 To UBound(tbl)
If .Range("B" & i).Value = tbl(j, 3) Then ' (AA)D列→B列、(BB)A列→C列
tmp = .Range("C" & i).Value ' (AA)E列→C列
stbl = Split(tbl(j, 2), " ") ' (BB)C列→B列
For k = 0 To UBound(stbl)
Select Case InStr(tmp, "/")
Case 0
If InStr(stbl(k), tmp) > 0 Then
.Range("L" & i).Value = tbl(j, 1) ' (AA)N列→L列、(BB)B列→A列
.Range("M" & i).Value = tbl(j, 4) ' (AA)O列→M列、(BB)D列→D列
.Range("N" & i).Value = tbl(j, 5) ' (AA)P列→N列、(BB)E列→E列
Exit For
End If
Case Else
If InStr(stbl(k), Left(tmp, InStr(tmp, "/") - 1)) > 0 Or _
InStr(stbl(k), Mid(tmp, InStr(tmp, "/") + 1, Len(tmp) - InStr(tmp, "/"))) > 0 Then
.Range("L" & i).Value = tbl(j, 1) ' (AA)N列→L列、(BB)B列→A列
.Range("M" & i).Value = tbl(j, 4) ' (AA)O列→M列、(BB)D列→D列
.Range("N" & i).Value = tbl(j, 5) ' (AA)P列→N列、(BB)E列→E列
Exit For
End If
End Select
Next k
End If
Next j
Next i
End With
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

細かく書いてあり初心者の私でもわかりやすかったです。
ありがとうございました。

お礼日時:2018/09/05 11:26

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