• ベストアンサー

エクセルのマクロについて教えて下さい。

皆様よろしくお願いします。シート1に5桁の管理番号が不規則に並んでいます。およそ230個の管理番号があります。シート2には管理番号とデータが一覧表になっています。シート1の管理番号の下2行にシート2を参照する式(=sheet2!H3および=sheet2!W3)を手打ちで入れています。エクセルのマクロを使ってシート1の管理番号の下に値を入れるのではなく式を入れることはできますか。なお、シート1は横のセルが80、縦のセル150の中に管理番号が不規則に並んでいます。シート2にはB列に管理番号H・W列にデータが並んでいます。このようなファイルが80位ありますので手打ちではなくマクロで自動化を図りたいと思います。officeXPを使用しています。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

いっていることは Sheet1 管理番号は5桁 約230個 80列x150行の中に散在 直下の下2行には管理番号がない?。 そこへ参照セルを入れる。 不規則出現 どのように管理番号のセルを探すのか。 目印は何か、またあるのか。 目でみりゃ判るでなく、コンピュター的に どう判別するのか。 ’----- Sheet2 データがある B列に管理番号、HWにデータがペア ーーーーー解法 Sheet1で管理番号はどのように見つけるのか。 (補足要求します) それが判れば、その番号でSheet2のB列を VLOOKUP関数(VBAの中でも使える)で該当行を探して見つける。そして、”=Sheet2!W”&該当行のように (H,W列)その文字列をSheet1管理番号セルの同列1つ下、および同列2行下のセルにそれぞれセットすればよい。Formulaプロパティをセットする。

nanryou
質問者

お礼

回答ありがとうございました。 「”=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

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>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と表示されます。

nanryou
質問者

お礼

VLOOKUP関数の使い方を示していただき、ありがとうございます。 勉強のためVLOOKUP関数を使ってプログラムを書き変えてみます。

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.2

こんばんわ。 式の設定はFormulaプロパティで出来るみたいです。 Worksheets("Sheet1").Range("A1").Formula = "=$A$4+$A$10" こんな感じです。↑

nanryou
質問者

お礼

回答ありがとうございました。 「Worksheets("Sheet1").Range("A1").Formula =」が参考になりました。 おかげさまで解決いたしました。 ありがとうございました。

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

こんばんは。 >(=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

nanryou
質問者

お礼

回答ありがとうございました。 wendy02様にはプログラムを作っていただき、お手数をお掛けいたしました。 最初に書けばよかったのですが、マクロは初心者で今勉強中です。 私にはこのプログラムの内容が難しく、応用が出来ませんでした。どうもすいません。 この内容が理解できるよう勉強を頑張ります。 ありがとうございました。

関連するQ&A

  • エクセルVBA初心者です。マクロを組んでください。

    エクセルVBA初心者です。組んで欲しいマクロがあります。 Sheet 1に13桁を入力するセル sheet 2に検索したいデータ 手順としては、 Sheet 1のセルにデータを入力 →13桁以上でマクロが開始(されるように設定します) →Sheet 1のセルと同じ数列をSheet 2の列Aから検索 →該当のセルを含む行をSheet 3にコピー →Sheet 1の入力セルの少し下にもコピー (確認用) というのを一回一回ずつやりたいです。 できれば作業中マウスやキーボードを触りたくないので、そのために、マクロの終わわりには入力セル内の消去、マクロの始まりには確認用でコピーした行の削除もつけて下さい。 検索するSheet 2には同じデータが含まれているので、出来ればひとつずつSheet 3にコピーしたいので組み込んで頂けると幸いです。 よろしくお願いいたします。

  • Excelのマクロを使ってのオートフィル

    Excelのマクロを使ってのオートフィルについて教えて下さい。 類似の質問があったのですが、決まったセルからのものが多くわかりませんでした。 マクロはまだ始めたばかりです。 やりたいことはExcelの2つのシートに別のcsvファイルの数字を入れることです。 ExcelのSheet1のD1セルに日付を表す数字が入っています。 Sheet2と3には2行目に月の日付がずらりと並んでいます。 1列目には記録番号が入っています。 それぞれのシートにSheet1のD1セルと同じ日付の列を見つけて、 その下の行から1列目の記録番号を元に検索したcsvファイルのデータを引っ張ってきたいのです。   Sheets("Sheet1").Select Cells(3, (Sheets("Sheet2").Range("D1")).Select と最初に入れるセルを探しても違う列に飛んでしまったりします。 又、下のセルまで数式もコピーできずに止まったままです。 VBAまでは手が出せずに悩んでいます。どうか教えて下さい。よろしくお願いします。

  • Excel 2007 マクロ 文字列の抽出について

    Excel 2007 マクロ 文字列の抽出について 元データのB列(番号)に5桁、3桁、7桁の数字が入っています。 その番号をSheet2にコピーして貼り付けます。 貼り付ける際に、5桁、3桁、7桁をそれぞれの列に入れます。 Sheet2のB列(番号2)で400番台はF列(種別)に国産 同じくB列(番号2)で900番台はF列(種別)に外国産 を反映するようにしたいです。 どのようなマクロになりますでしょうか。 サンプルがございましたら、お教えください。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • Excelマクロで置換

    Excelマクロで置換 セルA1に6桁・スペース・24桁の数字が入っています。 最初の6桁に130,397,430,440が含まれているシートを選択 そのシートの中に "ああああ"があったら"ああああい"に "いいいい"があったら"いいいいう"に "うううう"があったら"ううううえ"に と置換をするマクロを書きたいと思っています。 置換する対象の文字列は多いので別マクロで作成し呼び出したいと考えています。 シートは1ブックに30シート程。何シートあるかはブックによって変わります。 現在マクロの記録を使って試行錯誤しているのですが なにぶん初心者なのでなかなかうまくいきません。 どなたかご教授頂ければと思います。

  • 【再】エクセル2013 マクロをご教示ください

    Sheet1で選択しているセルの行をSheet2に転写したいです。 Sheet1とSheet2の4行目に見出し。 Shet1にはA~U列までデータがあります。(途中空白セルの場合もあり) Sheet1の5行目以降の、あるセルを選択してマクロを実行すると Sheet1のC~S列までをSheet2のA~Q列へコピペしたいです。 Sheet1は H列に必ずデータがあるので それらを最終行の判断基準とします。 Sheet1での選択セルは複数の場合もあります。 ただし、同じ行のセルを複数選択しても Sheet2への貼り付けは1行とします。 マクロを実行する度に、Sheet1での選択セルの該当行が Sheet2へ追加されるようにしたいです。 (Sheet2へコピペされたデータは残します) また、Sheet2への貼り付け内容が同じだった場合は 注意喚起のため メッセージで 「重複データが存在します」を表示したいです。 重複の判断基準はSheet2の B、D、F列とします。 宜しくお願い致します。

  • エクセルのセル内に順番をつけていくマクロ

    はじめまして。 私は、マクロ初心者でほとんど分からなく困っています。 内容というのが、例えばセル番号のB列に不規則に文字が入っており、それを上から順にA列に順番を付けるマクロを作りたいと思っています。しかし、その番号を付ける条件が特殊で、 1、特定の文字内容が入っている場合は飛ばす。 2、連続して文字が入っている場合は、上のセルに番号を付け、下のセルは番号を付けず飛ばす。 3、空白セルも飛ばす。 EX:  りんご  みかん  イチゴ となった場合、 1りんご □みかん 2イチゴ   というようになるようなマクロを作りたいと思います。(EXの□は空白を意味します。) 何かいい案がないでしょうか? 宜しくお願いします。

  • Excelマクロで・・・

    ワークシート名が「AZ20020101」というような形で付いています。 このシート名から下8桁を日付型で(2002/1/1のような形で)セルに取り出すマクロを作りたいのですがどのようにしたらいいでしょうか。 お分かりの方いましたら大至急お願いします。

  • excelでマクロを使用した連続印刷について

    A2セルから通し番号、氏名、住所等のデータが入力されている「データ」シートがあり、 VLOOKUPを使用してB3セルに「データ」シートのA列にある「通し番号」を 入力すると氏名・住所等が反映される「印刷」シートがあります。 例えば「データ」シートのC列(住所)に「東京都」という文字列が 含まれている宛名のみを連続で印刷したい場合、 どのようなマクロになりますでしょうか? (マクロ内に「東京都」と指定する方法と、 シート内の特定セルに入力した文字列で指定する方法が ありますでしょうか?) wordでの差し込み印刷や、宛名ソフト等の使用は考えておりません。 よろしくお願いいたします。

  • EXCELのマクロがわかりません・・・

    現在、A列にデータが並んでいるのですが、 これを7つ区切り(例:A1~A7、A15~A21)にして、 別シートに用意した表に行列を入れ替えて、 貼り付けるマクロを作っているのですが、 なにぶんVBは素人ですので、よくわかりません。 今作ろうとしているマクロは、 「元データ」セルのA1からA7までをコピーして、 「作成データ」セルのB2を起点として、 コピーした内容の行列入れ替えを行い貼り付け、 以後、「元データ」のコピー範囲を7つづつ 下にずらし、「作成データ」の貼り付け起点を 1つづつ下にずらして、「元データ」のA列の 最後までくりかえすものです。 必ず「Range」文で引っかかってしまうのですが、 何か構文的におかしいでしょうか? かなり急ぎですので、 わかる方、よろしくお願いしますっ!! 下に、作成したマクロを貼り付けます。 Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2005/12/5 ユーザー名 : *** Worksheets("元データ").Activate 開始行 = -6 終了行 = 0 ペースト行 = 0 Do 開始行 = 開始行 + 7 終了行 = 終了行 + 7 ペースト行 = ペースト行 + 1 開始セル番号 = "A" & 開始行 終了セル番号 = "A" & 終了行 ペーストセル番号 = "B" & ペースト行 Range("開始セル番号:終了セル番号").Select Selection.Copy Sheets("作成データ").Select Range(ペーストセル番号).Select Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _ , Transpose:=True Loop End Sub

専門家に質問してみよう