• 締切済み

エクセルの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のコピーを取らせていただけないでしょうか? よろしくお願いいたします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

マクロ入門レベルでは、なかなか難しいと思います。 マクロの場合、検索はどんなに速くても時系列ですから、その値が見つかるまでは、値が入れられないからです。検索値がある場合、ない場合を、想定しなくてはなりません。肝心な部分は、そんなに長くありませんから、ステップモードで、たどってみてください。 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 '//

from777
質問者

お礼

どうも、ご親切に回答いただきありがとうございました。 大変参考になりました。 また、何かと教えていただければ幸いです。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

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 とかでもいいです。

from777
質問者

お礼

どうもありがとうございました。 少々手を加え、何とか動きました。 また、教えてくださいね。

関連するQ&A

専門家に質問してみよう