プログラムの中にセルの値を直接記入しているところがあます。
Select Caseの行の 「Array("101", "102", "103", "104")」のとろです。
プログラムには101, 102, 103, 104ではなくB10~B13を使用したいのですが、うまくできません。
実際には4つだけではなく何十個もあって作業がわずらわしくなるのと、ブックごとに値が異なって
汎用性がないためです。
アドバイスいただけると助かります。
初歩的なことを質問しているかも入れませんが、よろしくお願いいたします。
シート名「表紙」のA列は部品番号(=シート名)でA10:101 A11:102 A12:103 A13:104とします。
これに対応したシートが4つあり、シート名は、「101」「102」「103」「104」とします。
使用者は「表紙」のシートで下記の作業を行います。
B6セルには製造番号(例:AM01-130012)を入力します。
B10~B13セルは「○」「×」を入力規則から選択します
○を選択した隣のC10~C13セルは部品個数で1~9の数値を入力規則から選択します。
○を選択したのと同じ行のD10~L10、D11~L11、D12~L12、D13~L13セルに、
文字列を入れる場合と入れない場合があります。文字列は左のD列から順に入れます。
下記マクロにて「○」となっているシートのみコピーを作成します。(1)
コピーしたシートすべてのB1セルに製造番号を入力します。(2)
D列に文字列があれば、コピーした対応するシートの中のH3~P3セルへ貼り付けます。(3)
C列の値によって、コピーした対応するシートの中のH3~P3セルの値をクリアします。(4)
<表紙のシート>
A B C D E F G H I J K L
5
6 AM01-130012
7
8
9
10 101 × 9
11 102 ○ 3
12 103 ○ 8 A1-1 A1-2 A1-3 A1-4 A1-5 A1-6 A1-7 A1-8
13 104 × 9
<プログラム>
Sub TestSample()
Dim c As Range
Dim 製造番号 As String
Dim flg As Boolean
flg = True
With ThisWorkbook
製造番号 = .Worksheets("表紙").Range("B6").Value
For Each c In .Worksheets("表紙").Range("B10:B13")
If c.Value Like "○*" Then
' ' (1)
If flg Then ' 初めてなら、○に対応したシートを「新しいブックにコピー」
.Worksheets(c.Offset(, -1).Text).Copy
flg = False
Else ' それ以外なら、○に対応したシートをアクティブブックの最後にコピー追加
.Worksheets(c.Offset(, -1).Text).Copy After:=Worksheets(Worksheets.Count)
End If
' ' (2)
' ' コピーしたすべてのシート(のB2)に製造番号を書き込む
Range("B1").Value = 製造番号
' ' (3)
' ' ○の行のD:L を 対応するシートのH3:P3 へ貼り付け
If c.Offset(, 2) <> "" Then ' D列が空でなければ
Range("H3").Value = c.Offset(, 2).Value
Range("I3").Value = c.Offset(, 3).Value
Range("J3").Value = c.Offset(, 4).Value
Range("K3").Value = c.Offset(, 5).Value
Range("L3").Value = c.Offset(, 6).Value
Range("M3").Value = c.Offset(, 7).Value
Range("N3").Value = c.Offset(, 8).Value
Range("O3").Value = c.Offset(, 9).Value
Range("P3").Value = c.Offset(, 10).Value
End If
End If
Next c
End With
' ' (4)
For Each 各シート In Worksheets
With 各シート
.Activate
Select Case ThisWorkbook.Worksheets("表紙").Cells(Application.Match(各シート.Name, Array("101", "102", "103", "104"), 0) + 9, "C").Value
Case "1" '1のときの仕事をする
Range("I3:P3").Select
Selection.ClearContents
Case "2" '2のときの仕事をする
Range("J3:P3").Select
Selection.ClearContents
Case "3" '3のときの仕事をする
Range("K3:P3").Select
Selection.ClearContents
Range("J3").Select
Case "4" '4のときの仕事をする
Range("L3:P3").Select
Selection.ClearContents
Case "5" '5のときの仕事をする
Range("M3:P3").Select
Selection.ClearContents
Case "6" '6のときの仕事をする
Range("N3:P3").Select
Selection.ClearContents
Case "7" '7のときの仕事をする
Range("O3:P3").Select
Selection.ClearContents
Case "8" '8のときの仕事をする
Range("P3").Select
Selection.ClearContents
Case "9" 'do nothing
Case Else
End Select
End With
Next
If flg Then
MsgBox "部品番号が選択されていません。"
Exit Sub
End If
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんなんでもいいかも。
作成例:
sub macro1()
dim s
For Each 各シート In Worksheets
s = 各シート.name
select case application.vlookup(iif(isnumeric(s), val(s), s), worksheets("表紙").range("A10:C13"), 3, false)
case 1
:
まぁでも、
>悩んでいたのは…
やりたいようにやりたいのでしょうから、どうぞお好きに。
作成例:
sub macro2()
dim a
dim i as long
a = application.transpose(worksheets("表紙1").range("A10:A13").value)
for i = 1 to ubound(a)
a(i) = a(i) & ""
next i
(中略)
select case worksheets("表紙").cells(application.match(各シート.name, a, 0) + 9, "C").value
case 1
(後略)
No.1
- 回答日時:
>プログラムには101, 102, 103, 104ではなくB10~B13を使用したい
一連のご相談の一番最初に躓いていた問題点ですが、「文字列の101」と「数値で記入された101」は「別物(等しくない)」というお話は、覚えていますね?
セルに何も考えず101と記入していたのでは、この問題が再発します。そうさせないために(このご相談でぼんやりと示唆されている)あなたのエクセルの実態に応じて、何某か適切な工夫をしてください。
簡単な方法:
B10:B13に「必ず」文字列の書式を施しておき、かつ「絶対に変更されない」よう、必要な措置を行う
簡単な方法:
B10:B13には「数値になり得るモノは必ず数値で」記入されるよう、必要な措置を行う
さらにシート名も「数値化し得るモノは数値に変えて」B10:B13を直接探し、C列を取り出す
あまり簡単ではない方法:
B10:B13の内容を「文字列化して変数に読み込み」、それを手掛かりにC列を参照する
>実際には4つだけではなく何十個もあって作業がわずらわしくなるのと、ブックごとに値が異なって
あなたのエクセルが具体的に事実としてどのようになってるのかあいまいなままなので、(それっぽい回答は多分沢山寄せられると思いますが)どんぴしゃの的確なアドバイスは現時点では得られないでしょう。(ま、可能性として誰かがたまたまビンゴを引いてくれるかも?しれませんけどね。そういう当てモノクイズに振り回されるのも、回答者としては願い下げです。)
この回答への補足
何度も回答いただき、ありがとうございます。
わかりにくい質問をしてしまって申し訳ございません。お詫び申し上げます。
また、肝心なところで質問に誤記がありました。
「プログラムには101, 102, 103, 104ではなくA10~A13を使用したい」の誤りです。
悩んでいたのは下記の方法でした。
あまり簡単ではない方法:
A10:B13の内容を「文字列化して変数に読み込み」、それを手掛かりにC列を参照する。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで別シートの同じ位置...
-
エクセルの下部のシートタブの...
-
エクセルでセルの書式設定がで...
-
ワークシートの行が途中から表...
-
excelで勝手にテキストボックス...
-
コピー&ペーストすると、VLOOK...
-
エクセルで多数のシートをまと...
-
wordからexcelへ一部のデータを...
-
エクセルで、シート1のセルをシ...
-
Excel2007で複数Sheetから同じ...
-
Excelで大量の2000個のリストを...
-
ロックしたセルのコピー&貼り付け
-
【エクセル】数式のセル番地を...
-
エクセルで打ち込んだ数字を自...
-
ピボットテーブルの統合
-
Excelで保護のかかったシートの...
-
EXCELで複数シート作成後、全シ...
-
Excelでハイパーリンク先の表示...
-
【OpenOffice】 改ページプレビ...
-
エクセルマクロで最終列に数値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで別シートの同じ位置...
-
エクセルの下部のシートタブの...
-
エクセルでセルの書式設定がで...
-
EXCELでコピーしたグラフのデー...
-
ワークシートの行が途中から表...
-
ロックしたセルのコピー&貼り付け
-
シート全体を他のブックのシー...
-
excelで勝手にテキストボックス...
-
Excelで保護のかかったシートの...
-
エクセルで数式は残したまま他...
-
VBA アクティブでないシートの...
-
Excelで大量の2000個のリストを...
-
シート保護してても並び替えを...
-
【エクセル】数式のセル番地を...
-
シート保護したExcelへの画像貼...
-
行の挿入ができなくなった
-
worksheetクラスのcopyメソッド...
-
Excelでハイパーリンク先の表示...
-
エクセルで選択した行以外を削...
-
エクセルで打ち込んだ数字を自...
おすすめ情報