教えて下さい!
今シートにはA列に日付(2003/1/1~2010/12/31)、B列からI列の1行目には項目名が入っています。
これから行いたいことは、別マクロで表示させたフォームのコンボボックスから日付を選択し、同じフォーム上にある項目名に沿った8つのテキストボックスにデータを入力することにより、そのデータがシートに反映されるというものを作成したいのです。
データが入力される部分は選択された日付の行の、各項目名と交わる部分となります。
(例)
|あああ|いいい|ううう・・・
2003/1/1 | | |
2003/1/2 | | |
2003/1/3 | | |
※上の表だとコンボボックスから2003/1/2を選択し、テキストボックス「いいい」部分にデータを入力するとC3セルにデータが入力されます。
コンボボックスにデータを表示させることは出来るのですが、そこから先(この日付を選んでテキストに入力して・・・)が出来ません。
よろしければ、記述を教えて頂きたいと思います。
宜しくお願い致します。
No.5ベストアンサー
- 回答日時:
#1です。
Cells(行番号, 列番号)ですので、列を変えたいなら列番号を工夫します。
i = 1 To 8 のループをしていて Cells( 行番号 , i + 1) ですので、i + 1 は 2 ~ 9 まで変化している事になります。
つまり B ~ I です。これを 11 ~ 17 (K~R)と 20 ~ 27 (T~AA)になるように考えれば良い訳です。
i + x の「x」部分を OptionButton の状態によって値を返す関数に変え、各OptionButtonの変化でもTextBoxの値が切り替わるように修正してみました。
'--ここから----------------------------------------------------------
Dim ws As Worksheet
Private Sub UserForm_Initialize()
Set ws = ActiveSheet
For Each r In ws.Range("A2", ws.Range("A65536").End(xlUp))
Me.ComboBox1.AddItem r.Text
Next r
Me.ComboBox1.Style = fmStyleDropDownList
Me.CommandButton1.Caption = "転記"
Me.OptionButton1.Value = True
End Sub
Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer
If ComboBox1.ListIndex < 0 Then Exit Sub
For i = 1 To 8
ws.Cells(ComboBox1.ListIndex + 2, i + OpBtnChk).Value = _
Me.Controls("TextBox" & i).Value
Next i
End Sub
Private Sub ComboBox1_Change()
Dim i As Integer
If ComboBox1.ListIndex < 0 Then Exit Sub
For i = 1 To 8
Me.Controls("TextBox" & i).Value = _
ws.Cells(ComboBox1.ListIndex + 2, i + OpBtnChk).Value
Next i
End Sub
Private Sub OptionButton1_Click()
ComboBox1_Change
End Sub
Private Sub OptionButton2_Click()
ComboBox1_Change
End Sub
Private Sub OptionButton3_Click()
ComboBox1_Change
End Sub
Private Function OpBtnChk() As Integer
If Me.OptionButton1.Value Then OpBtnChk = 1
If Me.OptionButton2.Value Then OpBtnChk = 10
If Me.OptionButton3.Value Then OpBtnChk = 19
End Function
'--ここまで----------------------------------------------------------
No.4
- 回答日時:
#1です。
Offsetと書きながらサンプルでOffsetを使ってないや。(^^;
Cellsで事は足りますね。
既にある皆さんの回答と殆ど同じですけど、、、
既にセルに入っている値を持ってくる部分を付加してみました。
1)該当シート(ActiveSheet)は 1行目がタイトル行
2)A列には必ずデータがある
2)UserForm に CommandButton1 と TextBox1~8 と ComboBox1 がある
という想定です。
なお、実行中に行列が削除される等は想定してません。
'--ここから----------------------------------------------------------
Dim ws As Worksheet
Private Sub UserForm_Initialize()
Set ws = ActiveSheet
For Each r In ws.Range("A2", ws.Range("A65536").End(xlUp))
Me.ComboBox1.AddItem r.Text
Next r
Me.ComboBox1.Style = fmStyleDropDownList
Me.CommandButton1.Caption = "転記"
End Sub
Private Sub CommandButton1_Click()
Dim i As Integer
If ComboBox1.ListIndex < 0 Then Exit Sub
For i = 1 To 8
ws.Cells(ComboBox1.ListIndex + 2, i + 1).Value = _
Me.Controls("TextBox" & i).Value
Next i
End Sub
Private Sub ComboBox1_Change()
Dim i As Integer
If ComboBox1.ListIndex < 0 Then Exit Sub
For i = 1 To 8
Me.Controls("TextBox" & i).Value = _
ws.Cells(ComboBox1.ListIndex + 2, i + 1).Value
Next i
End Sub
'--ここまで----------------------------------------------------------
この回答への補足
お礼を書いてしまった後なんですが・・・
例えばこの方法で、UserFormにOptionButtonが3つあり、切り替えることで入力される行を変更させることは出来ますか?
(例)
・OptionButton1を選択し、TextBox1~8にデータを入力するとB列~I列にデータが入力されます。
・OptionButton2を選択し、TextBox1~8にデータを入力するとK列~R列にデータが入力されます。
・OptionButton3を選択し、TextBox1~8にデータを入力するとT列~AA列にデータが入力されます。
スミマセン。質問ばかりで。。。
宜しくお願い致します。
No.3
- 回答日時:
こんにちは。
ComboboxにはA列の日付がセットされていて、TextBoxは項目順になっているとした場合
TextBoxの値をシートへもっていくためには、トリガーになるイベントが必要ですので
例えばUserForm上にCommandButtonをひとつ用意してそのクリックイベントで移動するようにします
項目が8項目程度であれば
---------------------------------------
Private Sub CommandButton1_Click()
With ComboBox1
Cells(.ListIndex + 2, "B") = TextBox1.Value
Cells(.ListIndex + 2, "C") = TextBox2.Value
Cells(.ListIndex + 2, "D") = TextBox3.Value
Cells(.ListIndex + 2, "E") = TextBox4.Value
Cells(.ListIndex + 2, "F") = TextBox5.Value
Cells(.ListIndex + 2, "G") = TextBox6.Value
Cells(.ListIndex + 2, "H") = TextBox7.Value
Cells(.ListIndex + 2, "I") = TextBox8.Value
End With
End Sub
---------------------------------------------
上記のコードは何をしているか一目で分かりますが、項目数が多い場合にはその項目数だけコードが長くなります。
で、項目数多くてもコードの長さを一定に保つには
---------------------------------------------
Private Sub CommandButton1_Click()
Dim C As Integer
With ComboBox1
For C = 1 To 8
Cells(.ListIndex + 2, C + 1) = Me.Controls("TextBox" & C).Value
Next C
End With
End Sub
------------------------------------------------
尚、日付を選択してない時のエラー処理等はしてありません。
No.2
- 回答日時:
ComboBoxを2つ (ComboBox1, ComboBox2)
TextBoxを1つ (TextBox1)
CommandButtonを1つ (CommandButton1)
をフォームに配置してください。
該当シートをSheet1にしてあります。
Private Sub UserForm_Initialize()
Dim ws As Worksheet, r As Range
Set ws = Sheets("sheet1")
For Each r In ws.Range("a2", ws.Cells(Rows.Count, 1).End(xlUp))
If Not IsEmpty(r) Then Me.ComboBox1.AddItem r.Text
Next
With Me.ComboBox2
.Column = ws.Range("b1", ws.Cells(1, Columns.Count).End(xlToLeft)).Value
End With
Set ws = Nothing
End Sub
Private Sub CommandButton1_Click()
Dim ctrl As Control, tst1 As String, txt2 As String
Dim ws As Worksheet, r As Long, c As Long
Set ws = Sheets("sheet1")
For Each ctrl In Me.Controls
Select Case ctrl.Name
Case "ComboBox1", "ComboBox2", "TextBox1"
If Me.Controls(ctrl.Name).Value = "" Then
txt1 = txt1 & ctrl.Name & vbLf
Else
txt2 = txt2 & Me.Controls(ctrl.Name).Value & vbLf
End If
End Select
Next
If Len(txt1) > 0 Then
MsgBox "以下の値を入力してください" & vbLf & txt1, vbExclamation
Exit Sub
Else
ret = MsgBox("以下の値を入力します" & vbLf & txt2, vbOKCancel)
If ret <> vbOK Then Exit Sub
r = ws.Columns(1).Find(Me.ComboBox1.Value, , xlValues).Row
c = ws.Rows(1).Find(Me.ComboBox2.Value).Column
ws.Cells(r, c) = Me.TextBox1.Text
End If
Set ws = Nothing
End Sub
No.1
- 回答日時:
ComboBox の ListIndex を使って行を割出して、Offsetで列を指定すれば良いのではないでしょうか?
Dim myRow As Long
myRow = Me.ComboBox1.ListIndex + 2
ActiveSheet.Cells(myRow, 2).Value = Me.TextBox1.Value
この回答への補足
ありがとうございます。
ListIndexで行を指定するところまではわかりましたが、その後のOffsetの使い方がわかりません。
もしよろしければ、例を出しておしえていただけますか???
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Excel(エクセル) excelにおける転記マクロの書き方 2 2023/05/12 03:16
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
白血球が多いとどんな心配があ...
-
尿検査の前日は自慰控えたほう...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
勃起する時って痛いんですか? ...
-
EXCELで条件付き書式で空白セル...
-
腕を見たら黄色くなってる部分...
-
EXCELで式からグラフを描くには?
-
変な話しになります。尿検査で...
-
excelでsin二乗のやり方を教え...
-
エクセル指定した範囲からラン...
-
Excelで""で囲む方法
-
ある範囲のセルから任意の値を...
-
2つの数値のうち、数値が小さい...
-
精子が黄色?
-
エクセルでエラーが出て困って...
-
納豆食べた後の尿の納豆臭は何故?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
至急!尿検査前日にオナニーし...
-
首吊りどこ締めるの
-
尿検査の前日は自慰控えたほう...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
白血球が多いとどんな心配があ...
-
中出しをするとお腹が痛い・・・。
-
射精をして1週間以内に尿検査を...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
勃起する時って痛いんですか? ...
-
変な話しになります。尿検査で...
-
これって喉仏ですか? 私は女性...
-
EXCELで条件付き書式で空白セル...
-
男です。昨日の午後3時くらいに...
-
今朝、毎朝の習慣でオナニーし...
-
納豆食べた後の尿の納豆臭は何故?
-
1日前の検尿
-
値が入っているときだけ計算結...
-
精子が黄色?
おすすめ情報