|
皆様始めまして、1ヶ月ほど前からvbaに取り組んでいます。
vbaの辞典やネットでもかなり調べてみたのですが全く作業が進展しなくなってしまいました、皆様に知恵をお借りしたいと思い投稿させて頂きましたよろしくお願いいたします。
ブックのシート1のC列に文字が入力されています、H列にも文字が入力されています。
(sheet1)
C列 H列
1 A
2 B
3 C
4 D
5 E
6 F
1 A
2 B
3 C
4 D
5 E
6 F
このシート1のC列の文字を上から連続で取得し、順番に検索させてシート2に
C列 H列
1 A
1 A
2 B
2 B
3 C
3 C
4 D
4 D
5 E
5 E
6 F
6 F
となるように書き出しを行いたいと思い次のマクロを書いてみたのですが、
Private Sub CommandButton7_Click()
Dim mykekka As Range
Dim myfirst As String
Dim srcname As String
Dim i As Long
Dim lRow1 As Long
Dim lRow2 As Long
lRow1 = Worksheets("sheet1").Range("c" & Rows.Count).End(xlUp).Row
For i = 2 To lRow1 Step 1
srcname = Worksheets("sheet1").Cells(i, 3)
Set mykekka = Worksheets("sheet1").Range("c:c") _
.Find(what:=srcname, _
lookat:=xlPart, _
searchdirection:=xlNext, _
MatchCase:=False, _
MatchByte:=False)
If Not mykekka Is Nothing Then
myfirst = mykekka.Address
Do
mykekka.Font.ColorIndex = 5
lRow2 = Worksheets("sheet2").Range("c" & Rows.Count).End(xlUp).Row
Worksheets("sheet2").Range("c" & lRow2 + 1).Offset(, 5).Value = _
mykekka.Value
Worksheets("sheet2").Range("c" & lRow2 + 1).Value = _
mykekka.Offset(, 5).Value
Set mykekka = Worksheets("sheet1").Range("c:c") _
.FindNext(after:=mykekka)
Loop While Not mykekka Is Nothing And _
mykekka.Address <> myfirst
Else
lRow2 = Worksheets("sheet2").Range("c" & Rows.Count).End(xlUp).Row
Worksheets("sheet2").Range("c" & lRow2 + 1).Offset(, 5).Value = _
mykekka.Value
Worksheets("sheet2").Range("c" & lRow2 + 1).Value = _
mykekka.Offset(, 5).Value
End If
Next i
End Sub
実行すると
C列 H列
1 A
1 A
2 B
2 B
3 C
3 C
4 D
4 D
5 E
5 E
6 F
6 F
1 A
1 A
2 B
2 B
3 C
3 C
4 D
4 D
5 E
5 E
6 F
6 F
のように同じ文字がある分だけ検索して書き出してしまいます、当たり前ですけど^^;
そこで一度検索した文字は文字の色を変えて次は検索しないようにと考えてはみたものの、一向にどの様に処理させればいいかが思い浮かびません。
どの様に処理させれば目的の形になるかご教授頂ければ幸いです。
勉強中の私が考えたマクロもかなり見苦しく間違った文面かとは思いますがよろしくお願いいたします。
|
|