![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
【図(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が該当セルになります。
こんな感じです。よろしくお願いします。
![「【図(1)】の値を【図(2)】【図(3)」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/c/318946_5497c9c7d14ae/M.jpg)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?5a7ff87)
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
ありがとうございます。
順調に動いてます。
いろいろ応用していきたいと思います。
sheet2、sheet3の列数なども可変にできるのでしょうか?
列数が100ぐらいになると
Select Case ban
Case Is = 100
go = 1
ここは100とか200まで入力しないとだめですか?
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?5a7ff87)
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
この回答への補足
何度もありがとうございます。
該当セルに転記されません。
例えば
sheet1 a:aの番号下二桁05はsheet2またはsheet3の表の該当セルに転記されないか10に転記されてしまいます。
同じように08は転記されません。09は8に転記されてしまいます。
なかなかうまくいかないものです。
よく止まってしまうのが
cho = Mid(Cells(i, 1), 2, 1)
Worksheets(shtn).Cells(ln, col) = itm
です。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?5a7ff87)
No.3
- 回答日時:
No2です。
お返事をいただいたので、再度マクロをチェックしてみたところ、正常に作動いたしました。ただBOOK1のしーと1のデータはBOOK2のシート1にコピーしています。そしてマクロはBOOK2のマクロに入れてあります。そういうわけで私はあなたのパソコンでなぜ動かないか、お答えすることができません。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?5a7ff87)
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
'
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- Excel(エクセル) 判定結果に応じて〇印(図形)をつけるマクロ 4 2022/10/30 11:22
- SEO 検索エンジン反映遅い 1 2022/06/04 07:35
- 教えて!goo 「検索すればすぐわかるのに。」「こういう質問はいかがなものか」 という質問はなぜ消されてしまう? 9 2023/07/20 13:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで数字を入れたら対応する...
-
エクセルで複数のシートのクリ...
-
エクセルファイルを開いた回数...
-
長い時間かかるマクロが実行中...
-
Excel VBAでのWorksheet_Change...
-
エクセルで特定の行だけ行削除...
-
エクセル シート内の一番下のセ...
-
Excelのシート上のShapeにイベ...
-
前月分を次月シートに繰越でき...
-
エクセルVBAで実行中画面を...
-
セルの一部分だけを太字にする方法
-
エクセル マクロ 一定時間おき...
-
任意のセルに貼り付けをするマ...
-
【エクセル】「実行時エラー’10...
-
Excel2003VBAご教示ください。
-
マクロ1があります。 A1のセル...
-
Excelでセル内の文字をファイル...
-
エクセルで、数字の大きい方、...
-
関数の使いすぎでエクセルが重...
-
【エクセル】フリーワード検索...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
Excelで数字を入れたら対応する...
-
エクセルで複数のシートのクリ...
-
エクセルファイルを開いた回数...
-
フォルダ内にある全ファイルの...
-
Excelのシート上のShapeにイベ...
-
エクセル シート内の一番下のセ...
-
長い時間かかるマクロが実行中...
-
セルの一部分だけを太字にする方法
-
【エクセル】フリーワード検索...
-
エクセルで特定の行だけ行削除...
-
エクセル:セル内の文字列の最...
-
EXCELのダイアログシートって、...
-
【エクセル】「実行時エラー’10...
-
Excelでセル内の文字をファイル...
-
エクセルで○をつけるマクロ設定
-
エクセル マクロ 一定時間おき...
-
前月分を次月シートに繰越でき...
-
エクセルのワークシート(テン...
-
自分の専門分野の仕事。初見で...
おすすめ情報