- 締切済み
エクセルのVBAに関する質問です。
エクセルのVBAに関する質問です。 仮にA列にA1からA14まで(12341231212345)と入っていて、さらにB列にB1からB14まで(38906493087639)と入っていたとします。A列の(2)の隣にあるB列の数字はそれぞれ(8407)になりますよね。 この2のとなりのB列の数字を、A列の最初から(1234)(123)(12)(12345)と1を区切りとして、C列に、2に対応していた先ほどの数字を入力したいのです。 つまりC列には(88884440077777)と入るようにしたいのですが、VBAド素人の私には解説書を読んでもいい知恵が浮かびません。 どなたか、ご説明か、できればVBAのコピーを取らせていただけないでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
マクロ入門レベルでは、なかなか難しいと思います。 マクロの場合、検索はどんなに速くても時系列ですから、その値が見つかるまでは、値が入れられないからです。検索値がある場合、ない場合を、想定しなくてはなりません。肝心な部分は、そんなに長くありませんから、ステップモードで、たどってみてください。 Rangeの前のActiveSheetは省略されていますので、標準モジュールにしてください。 '// Sub TestMacro1() Dim rng As Range Dim ret As Variant Dim iKen As Variant Dim iVal As Variant Dim i As Long, x As Long, y As Long '検索値 iKen = Application.InputBox("数値を入れてください", "検索値", Type:=3) If VarType(iKen) = vbBoolean Then Exit Sub 'A列 Set rng = Range("A1", Cells(Rows.Count, 1).End(xlUp)) rng.Offset(, 2).ClearContents 'C列をクリア ret = Application.Match(iKen, rng, 0) If IsNumeric(ret) = False Then MsgBox "検索値はありません。", vbExclamation Exit Sub End If Application.ScreenUpdating = False With rng y = 1 For i = 1 To .Rows.Count If iKen = y Then iVal = .Cells(i, 2).Value 'B列 End If If x = 0 Then x = i ElseIf .Cells(i + 1, 1).Value < .Cells(i, 1).Value _ Or i = .Rows.Count Then '書き出し C列 =3 Range(.Cells(x, 3), .Cells(i, 3)).Value = iVal iVal = "" x = 0: y = 0 End If y = y + 1 Next End With Application.ScreenUpdating = False Set rng = Nothing End Sub '//
- keithin
- ベストアンサー率66% (5278/7941)
C1セルに手で =IF(A1=1,B2,OFFSET(C1,-1,0)) と記入し,C14までコピーします。 マクロにしたければ sub macro1() with range("C1:C" & range("A65536").end(xlup).row) .formula = "=IF(A1=1,B2,OFFSET(C1,-1,0))" .value = .value end with end sub とかでもいいです。
お礼
どうもありがとうございました。 少々手を加え、何とか動きました。 また、教えてくださいね。
お礼
どうも、ご親切に回答いただきありがとうございました。 大変参考になりました。 また、何かと教えていただければ幸いです。