- ベストアンサー
エクセルのマクロについて教えて下さい。
皆様よろしくお願いします。シート1に5桁の管理番号が不規則に並んでいます。およそ230個の管理番号があります。シート2には管理番号とデータが一覧表になっています。シート1の管理番号の下2行にシート2を参照する式(=sheet2!H3および=sheet2!W3)を手打ちで入れています。エクセルのマクロを使ってシート1の管理番号の下に値を入れるのではなく式を入れることはできますか。なお、シート1は横のセルが80、縦のセル150の中に管理番号が不規則に並んでいます。シート2にはB列に管理番号H・W列にデータが並んでいます。このようなファイルが80位ありますので手打ちではなくマクロで自動化を図りたいと思います。officeXPを使用しています。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
いっていることは Sheet1 管理番号は5桁 約230個 80列x150行の中に散在 直下の下2行には管理番号がない?。 そこへ参照セルを入れる。 不規則出現 どのように管理番号のセルを探すのか。 目印は何か、またあるのか。 目でみりゃ判るでなく、コンピュター的に どう判別するのか。 ’----- Sheet2 データがある B列に管理番号、HWにデータがペア ーーーーー解法 Sheet1で管理番号はどのように見つけるのか。 (補足要求します) それが判れば、その番号でSheet2のB列を VLOOKUP関数(VBAの中でも使える)で該当行を探して見つける。そして、”=Sheet2!W”&該当行のように (H,W列)その文字列をSheet1管理番号セルの同列1つ下、および同列2行下のセルにそれぞれセットすればよい。Formulaプロパティをセットする。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
>VLOOKUP関数から行を探す方法が分かりませんでした 参考までにVLOOKUP関数のVBAでの使い方 を出しておきます。 Sub test01() Worksheets("Sheet5").Activate n = Val(InputBox("番号=")) x = WorksheetFunction.VLookup(n, Range("a1:b5"), 2, False) MsgBox x End Sub A1:B5にはたとえば A列 B列 1 a 3 d 4 g 7 h 8 k プログラムを実行すると、数を聞いてくるので、7と入れればhと表示されます。
お礼
VLOOKUP関数の使い方を示していただき、ありがとうございます。 勉強のためVLOOKUP関数を使ってプログラムを書き変えてみます。
- guruguru2
- ベストアンサー率29% (39/132)
こんばんわ。 式の設定はFormulaプロパティで出来るみたいです。 Worksheets("Sheet1").Range("A1").Formula = "=$A$4+$A$10" こんな感じです。↑
お礼
回答ありがとうございました。 「Worksheets("Sheet1").Range("A1").Formula =」が参考になりました。 おかげさまで解決いたしました。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 >(=sheet2!H3および=sheet2!W3)を手打ちで入れています。 H3 に対して、連動しているのですね。 もしそうでしたら、本来は、検索範囲を狭めたいところですが、こちらでは分かりませんので、UsedRangeを使用しました。 Sub EnterFormula() Dim Sh1 As Worksheet, Sh2 As Worksheet Dim c As Range, f1 As Variant Set Sh1 = Worksheets("Sheet1") Set Sh2 = Worksheets("Sheet2") Application.ScreenUpdating = False For Each c In Sh1.UsedRange 'UsedRangeを使いました If Not c.HasFormula Then f1 = Application.Match(c.Value, Sh2.Columns(8), 0) If Not IsError(f1) Then '式代入 c.Offset(1).Formula = "=" & Sh2.Name & "!H" & f1 '管理番号 c.Offset(2).Formula = "=" & Sh2.Name & "!W" & f1 End If End If Next c Set Sh1 = Nothing : Set Sh2 = Nothing Application.ScreenUpdating = True End Sub
お礼
回答ありがとうございました。 wendy02様にはプログラムを作っていただき、お手数をお掛けいたしました。 最初に書けばよかったのですが、マクロは初心者で今勉強中です。 私にはこのプログラムの内容が難しく、応用が出来ませんでした。どうもすいません。 この内容が理解できるよう勉強を頑張ります。 ありがとうございました。
お礼
回答ありがとうございました。 「”=Sheet2!W”&該当行のように」が参考になりました。どうもありがとうございました。 なお、VLOOKUP関数から行を探す方法が分かりませんでした。 稚拙なプログラムですが皆様のお陰で出来ましたので、この場を借りてご報告いたします。ありがとございました。 Sub harituke() Dim k_bangou As String Dim yoko As Integer Dim tate As Integer Dim gyo As Integer Dim i As Integer Dim r As Integer yoko = 80 tate = 150 Worksheets("sheet1").Select Range("A1").Select For r = 1 To tate For i = 1 To yoko k_bangou = ActiveCell.Value If False <> IsNumeric(k_bangou) And 5 = Len(k_bangou) Then Worksheets("sheet2").Select Range("B2").Select gyo = 2 Do While ActiveCell.Value <> "" If k_bangou = ActiveCell.Value Then Worksheets("Sheet1").Cells(r + 1, i).Formula = "=sheet2!H" & gyo Worksheets("Sheet1").Cells(r + 2, i).Formula = "=sheet2!W" & gyo Exit Do End If gyo = gyo + 1 ActiveCell.Offset(1, 0).Select Loop Worksheets("sheet1").Select End If ActiveCell.Offset(0, 1).Select Next ActiveCell.Offset(1, -yoko).Select Next End Sub