昨日の質問ですが、ちょっと詳しく説明させていただきます。
VBAの初心者、初めてのコーディングです。
ネットで調べつつ、悩みながらゆっくりソースを書いております。
宜しくお願い致します。
sheet1のセルA1は1月~12月のプルダウンです。
sheet1のセルA1に6月を選ぶ時、
sheet2のI40、I54、I68、I82...の値をsheet1のD3~D9にセットします。
このセルとセルの紐づきと値の取得処理は終わってます。
こんな感じで値をセットしております。
「if ws.range("A1").Value="6月" then
ws.range("D3").Value=application.round("sheet2".range("I40").value/100000,1)
ws.range("D4").Value=application.round("sheet2".range("I54").value/100000,1)
...」
実現したいのは次に
sheet1のセルA1に
7月を選ぶ時、セルに値を一つ一つセットではなくて、
列+1、J列の値を取得する。
J40、J54、J68、J82...
8月を選ぶ時、K列の値を取得する。
列+2
K40、K54、K68、K82...
9月を選ぶ時、L列の値を取得する。
列+3
L40、L54、L68、L82...
…
また、月を選ぶことによって取得データは変わる時、IF、IF ELSEの分岐分を使いますか?
こんな機能をソースをどうやって書けばよいでしょうか。
説明がうまくできず申し訳ございません。
皆様のご知恵を借りていただきたいと思います。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
以下のようにしてください。
dim tukiは1月から12月の月の文字をとった数値1~12 が格納されます。
dim colは1月から12月に対応したSheet2の列の値を格納します。
4月の場合、G列=7
5月の場合、H列=8
・・・
12月の場合、O列=15
1月の場合、P列=16
・・・
3月の場合、R列=18
となるようにcolに値を設定します。
月が4月以降なら、月+3
月が3月以前なら、月+15
が求めるcolの値です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Public Sub 月対応設定()
Dim tuki As Variant '月を表す数値 1~12
Dim col As Long '列を表す数値 4月=7,5月=8,,12月=15,1月=16,,
Dim ws As Worksheet
Dim ws2 As Worksheet
Set ws = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
If ws.Cells(1, 1).Value = "" Then Exit Sub
tuki = Left(ws.Cells(1, 1).Value, Len(ws.Cells(1, 1).Value) - 1)
If tuki < 4 Then
col = tuki + 15
Else
col = tuki + 3
End If
ws.Range("D3").Value = Application.Round(ws2.Cells(40, col).Value / 100000, 1)
ws.Range("D4").Value = Application.Round(ws2.Cells(54, col).Value / 100000, 1)
End Sub
No.2
- 回答日時:
質問を立てなおすなら前の質問はきちんと閉じましょう。
>7月を選ぶ時、セルに値を一つ一つセットではなくて、
>列+1、J列の値を取得する。
これですと基準の列はI列となり”6月”と言う事になりますが???
結局
・4月ならG列(列番号:7)
・5月ならH列(列番号:8)
・6月なら9
・7月なら10
と月+3で列番号が取れますよね。
⇒1~3月はどうなっているかで補正をかける必要もあるようですし。
それに『Combobox』ではなく『入力規則』を用いているのでは?
と、Excel-PCから離れる初級レベルなジジィはここで停まりますけど。
>sheet2のI40、I54、I68、I82...の値をsheet1のD3~D9にセットします
もう一つの背景に色を付けてるセル群は何か意味が?
>また、月を選ぶことによって取得データは変わる時、IF、IF ELSEの分岐分を使いますか?
上記に書いたように月数を利用して列番号を取得する手段を取るなら判定式は不要かと。
No.3
- 回答日時:
こんにちは
同じ質問を(締め切りもせずに)繰り返すのは、回答が分散するだけでなく、同じような回答も繰り返されるので、得なことはありません。
https://oshiete.goo.ne.jp/qa/12485040.html
数少ない情報であったセルの位置も変わっているようですし、回答を得ても実際のセル関係と異なる場合は、ご自身でそれを読み解くだけの技量が必要になります。
前回も回答しましたけれど、規則的に同じセルを参照するだけの内容なので、関数を設定しておいた方が、いちいちマクロを実行する必要もなくなります。
ですので、特別な理由がない限りは、この方法一番のお勧めです。
・・・などと言ったところで、多分、マクロに拘るのでしょうから、そちらの例もご参考までに。
(上記の関数での解決法も兼ねたつもりですが、意味が伝わるかどうかは質問者様次第なので不明。)
f = "=ROUND(OFFSET(Sheet2!$C$26,ROW(A1)*14,LEFT($A$1,LEN($A$1)-1))/100000,1)"
With Worksheets("Sheet1").Range("D3:D9")
.FormulaLocal = f
.Value = .Value
End With
No.4
- 回答日時:
こんにちは
#3様に同感ですが、どうしましょう、、
https://oshiete.goo.ne.jp/qa/12483964.html
こちらは、どうするのでしょう?
限定的な処理コードになりますが、やり方は色々あります
>sheet1のセルA1に7月を選ぶ時
この実行トリガーなら
sheet1のシートモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
で実行します。
sheet2の1月はD列から始まっているのかな?
結合セルはいただけないです。。
抽出、代入セルは固定で良いのでしょうか、、Offsetなどで直せるかな
どうも、ドロップダウンとおしゃったのは入力規則のようですね、、
理解できるか出来ないかは、判りませんが ご質問の表組で
>>
sheet1のセルA1に
7月を選ぶ時、セルに値を一つ一つセットではなくて、
列+1、J列の値を取得する。
J40、J54、J68、J82...
8月を選ぶ時、K列の値を取得する。
列+2
K40、K54、K68、K82...
9月を選ぶ時、L列の値を取得する。
列+3
L40、L54、L68、L82...
>>
列は何を指しているのか不明ですが
>値をsheet1のD3~D9にセットします。
するプログラムです。
雑ですが、検索パターン
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, Cl As Range, n As Long
If Not Intersect(Target, Range("A1")) Is Nothing Then
With Worksheets("Sheet2")
Set Cl = .Range("D30:P30").Find(Target)
If Not Cl Is Nothing Then
Application.EnableEvents = False
For i = 40 To 124 Step 14
Cells(3 + n, "D").Value = .Cells(i, Cl.Column).Value
n = n + 1
Next
Application.EnableEvents = True
End If
End With
End If
End Sub
注意 上記は月のセル範囲に結合セルがあるとエラーになります。
結合セル対策をすれば良いですが、表組作成途中のようなので割愛
雑ですが、入力数値(数値部分を取り出す)パターン
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long, Cl As Integer, n As Long
Dim Ary
If Not Intersect(Target, Range("A1")) Is Nothing Then
Cl = CInt(numEx(StrConv(Target.Text, vbNarrow)))
If Cl < 1 Then Exit Sub
With Worksheets("Sheet2")
Application.EnableEvents = False
For i = 40 To 124 Step 14
Cells(3 + n, "D").Value = .Cells(i, Cl + 3).Value
n = n + 1
Next
Application.EnableEvents = True
End With
End If
End Sub
Function numEx(strV As String) As String
Dim i As Integer, numText As String
For i = 1 To Len(strV)
numText = Mid(strV, i, 1)
If numText Like "[0-9]" Then numEx = numEx & numText
Next i
End Function
補:Cl + 3はD列から始まっているようなので、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) Excleマクロ セル値の代入と文字列の結合について 3 2022/10/05 16:47
- Visual Basic(VBA) C3とC4のセルに、Visual basicで実行した時入力した値をC3に表示させ、その後に、C3に 1 2023/07/14 09:43
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
Excelのマクロについて教えてく...
-
VBA レジストリの値の読み方に...
-
ExcelのVBAコードについて教え...
-
Excel マクロについての相談
-
Excel VBA 定義されたプロージ...
-
Vba SelStart、SelLen教えてく...
-
エクセルのマクロについて教え...
-
VBAに詳しい方教えてください。
-
VBAの質問になります メッセー...
-
ユーザーフォームに別シートか...
-
2つのマクロでチェックボックス...
-
VBA listBoxから
-
VBA初心者 Ctrl+での操作、ボタ...
-
VBA 複数条件の分岐処理の上手...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
左右の表のキー位置を合わせたい
-
VBAの質問になります Userform内で
-
Excelについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報