• ベストアンサー

【図(1)】の値を【図(2)】【図(3)】の該当セ

【図(1)】book1sheet1の品名を【図(2)】book2sheet2または【図(3)】book2shee3の該当するセルに転記するマクロなんですが 例) 【図(1)】のa801蜜柑は、a801から"a"でbook2のsheet2を検索、"8"から8Aを検索、"01"から1を検索し、【図2】のE3が該当セルになります。 【図(1)】のb808西瓜は、b808から"b"でbook2のsheet3を検索、"8"から8Bを検索、"08"から8を検索し、【図(3)】のC44が該当セルになります。 こんな感じです。よろしくお願いします。

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

  • ベストアンサー
noname#192382
noname#192382
回答No.5

お答えします。マクロを働かせるときに、シート2か3を開いているとエラーになりました。 そこでどのシートを開いているか関係なく、動くようプログラムを変えました。試してみてください。念のためにですが、シート1はシート2、3と同じファイルに入っています。 Option Explicit Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2013/3/4 ユーザー名 : ' Dim i As Integer, sh As String, cho As Integer, ban As Integer, itm As String, bango As String, shtn As Integer, go As Integer, kum As Integer, ln As Integer, col As Integer Worksheets(1).Activate For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row bango$ = Cells(i, 1) sh = Left$(bango$, 1) 'MsgBox sh cho = Mid(bango$, 2, 1) 'MsgBox cho ban = Mid(bango$, 3, 2) 'MsgBox ban itm = Cells(i, 2) 'MsgBox itm Select Case sh Case Is = "a" shtn = 2 Case Is = "b" shtn = 3 End Select 'MsgBox shtn If ban < 5 Then kum = (8 - cho) * 6 + 1 Else kum = (8 - cho) * 6 + 4 End If 'MsgBox kum Select Case ban Case Is = 1 go = 5 Case Is = 2 go = 4 Case Is = 3 go = 3 Case Is = 4 go = 2 Case Is = 5 go = 1 Case Is = 6 go = 5 Case Is = 7 go = 4 Case Is = 8 go = 3 Case Is = 9 = 2 Case Is = 10 go = 1 End Select ln = kum + 2 col = go Worksheets(shtn).Cells(ln, col) = itm Next ' End Sub

bomberking
質問者

お礼

ありがとうございます。 順調に動いてます。 いろいろ応用していきたいと思います。 sheet2、sheet3の列数なども可変にできるのでしょうか? 列数が100ぐらいになると Select Case ban Case Is = 100 go = 1 ここは100とか200まで入力しないとだめですか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#192382
noname#192382
回答No.4

NO3です。もう解決したと思いますが、データ数が不定の場合でも対応できるようプログラムを直しましたので、答えさせてください。 Option Explicit Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2013/3/4 ユーザー名 : ' Dim i As Integer, sh As String, cho As Integer, ban As Integer, itm As String, bango As String, shtn As Integer, go As Integer, kum As Integer, ln As Integer, col As Integer For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row bango = Cells(i, 1) sh = Left$(Cells(i, 1), 1) 'MsgBox sh cho = Mid(Cells(i, 1), 2, 1) 'MsgBox cho ban = Mid(Cells(i, 1), 3, 2) 'MsgBox ban itm = Cells(i, 2) 'MsgBox itm Select Case sh Case Is = "a" shtn = 2 Case Is = "b" shtn = 3 End Select 'MsgBox shtn If ban < 5 Then kum = (8 - cho) * 6 + 1 Else kum = (8 - cho) * 6 + 4 End If 'MsgBox kum Select Case ban Case Is = 1 go = 5 Case Is = 2 go = 4 Case Is = 3 go = 3 Case Is = 4 go = 2 Case Is = 5 go = 1 Case Is = 6 go = 5 Case Is = 7 go = 4 Case Is = 8 go = 3 Case Is = 9 = 2 Case Is = 10 go = 1 End Select ln = kum + 2 col = go Worksheets(shtn).Cells(ln, col) = itm Next ' End Sub

bomberking
質問者

補足

何度もありがとうございます。 該当セルに転記されません。 例えば sheet1 a:aの番号下二桁05はsheet2またはsheet3の表の該当セルに転記されないか10に転記されてしまいます。 同じように08は転記されません。09は8に転記されてしまいます。 なかなかうまくいかないものです。 よく止まってしまうのが cho = Mid(Cells(i, 1), 2, 1) Worksheets(shtn).Cells(ln, col) = itm です。

全文を見る
すると、全ての回答が全文表示されます。
noname#192382
noname#192382
回答No.3

No2です。 お返事をいただいたので、再度マクロをチェックしてみたところ、正常に作動いたしました。ただBOOK1のしーと1のデータはBOOK2のシート1にコピーしています。そしてマクロはBOOK2のマクロに入れてあります。そういうわけで私はあなたのパソコンでなぜ動かないか、お答えすることができません。

bomberking
質問者

補足

ありがとうございます。 すべての表は可変なんです。 http://i.imgur.com/z5b22wh.jpg

全文を見る
すると、全ての回答が全文表示されます。
noname#192382
noname#192382
回答No.2

一応答えができましたのでお答えします。ただしbook1 のシートはbook2のシート1にあるものとしてマクロを作っています。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2013/3/4 ユーザー名 : ' Dim i As Integer, sh As String, cho As Integer, ban As Integer, itm As String, bango As String, shtn As Integer, go As Integer, kum As Integer, ln As Integer, col As Integer For i = 2 To 6 bango = Cells(i, 1) sh = Left$(Cells(i, 1), 1) 'MsgBox sh cho = Mid(Cells(i, 1), 2, 1) 'MsgBox cho ban = Mid(Cells(i, 1), 3, 2) 'MsgBox ban itm = Cells(i, 2) 'MsgBox itm Select Case sh Case Is = "a" shtn = 2 Case Is = "b" shtn = 3 End Select 'MsgBox shtn Select Case cho Case Is = 8 If ban < 5 Then kum = 1 'ElseIf Else kum = 4 End If Case Is = 7 If ban < 5 Then kum = 7 Else kum = 10 End If End Select 'MsgBox kum Select Case ban Case Is = 1 go = 5 Case Is = 2 go = 4 Case Is = 3 go = 3 Case Is = 4 go = 2 Case Is = 5 go = 1 Case Is = 6 go = 5 Case Is = 7 go = 4 Case Is = 8 go = 3 Case Is = 9 go = 2 Case Is = 10 go = 1 End Select ln = kum + 2 col = go Worksheets(shtn).Cells(ln, col) = itm Next '

bomberking
質問者

お礼

http://i.imgur.com/YDiOVdv.jpg ありがとうございます。 ここに図をアップしてみました。 F列は全角になっています。 いまのところ、うまく動きません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

ご質問の意図がいまいちよく分からないのですが。 sheet2やsheet3の表は固定ですか。つまり、例えばsheet2でいうとF列で8A(画像が不鮮明なのですが8Aですよね)になっているところは1~6行目、7Aのところは7~12行目になっていますが、この行位置と行数は変わらないと言う事で良いですか(8Aの上に9Aが追加されて、8Aが7~12行目になることはあるかと言うです。また、各6行というのが8行になったりしないかと言いう事です)。また、よこに見て、A~F列を使っていますが、これがA~G列に増えたりと言う事もないですか。 何を言いたいかと言いますと、検索によらなくても、品目の番号によって、転記先の位置は決まっているのではないでしょうか、と言う事です。 頭の1ケタがaならSheet2、bならSheet3を使う。 2文字目が8なら1~6行目、7なら7~12行目を使う (仮に最初の行(1,7行目)をaとします) (なお、aの値は2文字目の数字をnとすると49-(6×n)で決まりますね)。 後ろ2ケタが01(仮に(1)とします)なら、a+2行目の(6-(1))列目が転記位置、 後ろ2ケタが5より大きければ、例えば08(仮に(8)とします)なら、a+5行目の(11-(8))列目が転記位置になると思います。 表の行数、列数、行位置等に変化がないのであれば、これをそのままプログラムに書いてしまうと良いでしょうし、変化があるのであれば、この品目の番号から行位置、列位置に変換すること自体の変換表を作ればスッキリすると思います。 ただ、ご質問だけを見ると、sheet1なしで、いきなりSheet2やSheet3に品名を書いたら良いのではとも思うのですが・・。 ご質問の趣旨と外れているようにも思いますので、そうでしらご容赦ください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 回答なしなのでもう一度 図がみにくいですか?

    該当するセルに転記するマクロなんですが 例) 【図(1)】のa801蜜柑は、a801から"a"でbook2のsheet2を検索、"8"から8Aを検索、"01"から1を検索し、【図2】のE3が該当セルになります。 【図(1)】のb808西瓜は、b808から"b"でbook2のsheet3を検索、"8"から8Bを検索、"08"から8を検索し、【図(3)】のC44が該当セルになります。

  • Excel2003 BookからBookへ転記

      A      B       C       D 1 コード   日付   枚数   金額 2 1502     7/1     8    25500 フォルダ内でBook1 Sheet1に毎日の売り上げを入力します、コードが50超あります。コード別にBook2~Book51を作成(Book2は1502)として転記させることは可能でしょうか? Book1 Sheet2に転記することは出来ますが、BookからBookは私の力量ではむずかしいです、Book2 Shee1はデータ蓄積、sheet2は納品、sheet3は請求と活用して行きたいと思います、どうぞ宜しくお願いいたします。

  • EXCEL VBAで複数のシートの中から該当値を検索する方法について

    すいません、EXCEL VBAで複数のシートの中から該当する値を検索する方法について教えていただきたいことがあります。      Sheet1              A列   B列  C列   1行  11  りんご  31  2行  12  バナナ  32  3行  13  みかん  33  4行  14  ぶどう  34   ・   ・   ・     ・        Sheet2              A列   B列  C列   1行  31  すいか  11  2行  32  レモン  12  3行  33  パイン  13  4行  34  ざくろ  14   ・   ・   ・     ・ というデータが入っているブックについて 「全部のシートを検索し、A列に11の値が入っているセルの行数及びその行のB列の値」 をSheet1のD1セルとE1セルにそれぞれ返す方法はどうしたらよろしいんでしょうか。 For Each を使うのではないかと思って色々やってみたのですが、どうも上手く作動してくれません。 よろしくお願いいたします。

  • 2つのBook間で共通のキーワードを使いデータを転記するには?

    下記のようなデータがある場合、Book1/sheet1のD列へ Book2/sheet1 C列のデータを転記したい。キーワードは 各Book B列のロットNO.です。どのようなマクロを 組めばいいのでしょうか? Book1/sheet1    A    B    C    D 1  品名 ロットNO. 数量 2  A   A123   25   50(転記) 3  A   A234   20   75(転記) 4  A   A345   22   60(転記) ・ Book2/sheet1    A    B    C    D 1  品名 ロットNO. 時間(HR) 2  A   A123    50 3  A   A234    75 4  A   A345    60 ・

  • EXCELでブックを開かず?に値をコピーするには?

    VBAに関する質問です 現在作業中のブック「Book1」のシート「Sheet1」のセル「A1~A10」の値を、開いていない「Book2」のシート「Sheet2」のセル「B1~B10」にコピーし、さらに「B1~B10」の値をソートするということをしています。 現状ではBOOK2を開いてコピーするという方法しか判らないので、そうしているのですが、いちいちBOOK2が立ち上がるのが目障りなので、BOOK2を開かないか非表示のまま作業できないものかと思っております。 何卒よろしくお願いします。

  • エクセルマクロ:別のブックから該当するデータをコピー

    Book1のSheet1、A列に日付、B列に対応するデータがあります。 Book2のSheet1A1セルに入力された日付と一致するBook1Sheet1B列の値を、Book2のB1セルに値貼り付けしたいのですが、どのように記述すればよろしいでしょうか。 宜しくお願いいたします。

  • 1の表の値を2表から探してその隣列の値を3表へ貼付

    なかなかうまくできないため、もう少し詳しくかきます。 表画像は細かいので貼りつけません。excel2007 (1)book1.の表の値を (2)book2.の表の中から見つけて、その隣の列の値を (3)book3.の表の該当する箇所にふりがな表記の縦書きにして貼付けます。 book1.sheet1 B3から下方に英数字の値が1000行程度羅列しています。 例)a243,a546,b124... その値をbook2.sheet1 A列の中から見つけ、 その隣B列の値"文字列"を book3.sheet1の表の該当箇所に、 ふりがな表記の縦書きにして貼付けます。 book3.の表は、A2:Y2 までの列に25,24,23,22,...1と A5:Y5の列に50,49,48...26と数字が左から右に並んでいて、 このA2:Y7で1グルーブになり、Z2に"A1グループ"となっています。 このグループが下方に"A1グループ"~"A8グループ" 8グループあるというような表です。 ちなみに"A2グループ"はA8:Y13というぐあいです。 このAグループがsheet1に,sheet2にはBグループが同じ表であります。 例)book1でa243という値は最終的にbook3のA2グループの43のセルの2つ下H13に (2)(3)という方法で貼付けます。 b124という値はbook3 sheet2 Bグループの表”B1グループ"の24のセルの2つ下B:4に貼付けられます。 よろしくお願いします。

  • エクセルで別Bookのシートの指定セルの値を転記

    書式の決まった「申請書」の指定セルの値を別のBookの「申請書リスト」シートに引っ張りたいのですが、例えば申請書のG6に品名が入っているので、申請書リストのD列に品名を入力したらその申請書の決まったセルをリストの品名の横(行)に順番に転記。 申請書のシートは複数開いている状態もありなので、品名を入れたら当該申請書シートの目的のセルをリストに自動転記したいのです。 同じ品名のシートが複数同時に開いていることは無いです。

  • 【ExcelマクロVBA】抽出したデータをリストボックスで表示させるマクロ

    Excelであるセルに入力したデータを別シートから抽出して、別セルにリストボックスで表示させる方法が分らなくて悩んでいます。 例えば、下のような価格表があって   <A列> <B列> <C列> 1 りんご A店  100円 2 りんご B店   90円 3 すいか A店  950円 4 すいか C店 800円 5 みかん D店  100円  ・  ・   ・  ・  ・   ・ 入力シートが別シートにあり、   <A列> <B列> <C列> 1 2 3 セルA1へ例えば「すいか」を入力(リストボックスから選択できるようにしてあります)した場合、B1は「A店」か「C店」のみが、C1は「950円」か「800円」のみを選択できるようなマクロを作りたいと思っています。この価格表は流動的で毎日更新されています。A列の品名は絶えず更新し、C列の価格も変動しているのでLookupなどの関数では無理ではと思っていますがマクロだと可能でしょうか? なお、この入力シートを別シートへ転記させて活用するつもりで 入力ミスや空欄をチェックさせて転記を中断(MsgBox等)させたいのですが、セル指定で判断させるのではなく(A列を全て埋める必要はありません)、例えばA1に品名が入力した場合、1行目の該当セル(記入必須項目)の空欄が無いこと・入力が正しいかをチェックする様な条件分岐のマクロ記述方法を教えてください。 説明が拙いかと存じますが、宜しくお願いします。

  • Excelの複数の行番号の指定したセルを他のシートの

    特定のセルに表示させる方法はありますか? これだけではわかりづらいと思いますので…。 例えば、Book1のシート1のセルB3からD3をシート2のセルC4F6K6に表示(同じセルではない)させ、このシートを他の新しいブック(Book2)として保存(これは印刷するので無理なら必ずしも保存出来なくても良い)し、Book1のシート1のセルB3からD3に入力したデータはそのまま(変更しない)で、次に次の行のB4からD4をBook1のシート2のセルC4F6K6に表示させ、またこのシートを他の新しいブック(Book3)として保存する、というような作業を繰り返したいのです。 要するにBook1のシート1の行の上から下へ順番にデータを入力していき、常にシート2の特定セルにシート1の最新データが表示されるようにしたい、ということです。 要領はわかっていただけたでしょうか? よろしくお願いします。

専門家に質問してみよう