画像のUserFormのupdateData3のid,name,stockにそれぞれシート4の左から2,6,3列目のデータを表示させるようにしています。
UserFormの処理は以下(1)です。
またその情報取得のためにシート4では以下(2)のような処理を行っています。
このとき、UserFormのテキストボックスに入力した情報を取得先のシート4の該当データに上書きするにはどうすればいいでしょうか?
素人考えでは配列yをPublicにしないと上書きができないと思い、yをグローバル変数にしていますがこれで配列がグローバル化しているかもよくわかってないです。
うまく説明できていないかもしれませんが是非ご教授お願いします。
(1)
Option Explicit
Public Function updateData3(id As String, name As String, stock As String) As String
'受け取ったデータをセット
idLabel.Caption = id
nameLabel.Caption = name
stockLabel.Caption = stock
Me.TextBox1.SetFocus
Me.Show
updateData3 = 0
End Function
Private Sub commandbutton1_click()
Sheet4.intData3 = 0
Unload Me
End Sub
Private Sub textbox1_exit(ByVal cancel As MSForms.ReturnBoolean)
If idLabel.Caption = TextBox1.Text Then
Unload Me
Else
MsgBox "一致しません"
TextBox1.Text = ""
Me.TextBox1.SetFocus
End If
End Sub
(2)
Option Explicit
Public y
Public intData3 As Integer
Public intData4 As Integer
'==========================================================
'在庫ボタンの処理
'==========================================================
Sub zaikoButton()
Dim lRow As Long, lCol As Long
Dim i As Long, j As Long
Dim x, y, z
Dim a, n
Dim cnt1 As Long, cnt2 As Long
cnt1 = 0
cnt2 = 0
'----最終行
lRow = Cells(Rows.Count, 2).End(xlUp).Row
'----最終列
lCol = 25
'----データを配列Xに読み込む
x = Range(Cells(4, 1), Cells(lRow, lCol)).Value
'----データを書き出す配列yを準備する
ReDim y(1 To lRow, 1 To lCol)
'----データを書き出す配列zを準備する
ReDim z(1 To lRow, 1 To lCol)
intData3 = 1
For i = 4 To lRow
'----削除しないデータを配列yに書き込む
If Not Cells(i, 1).Value = "" Then
a = UserForm4.updateData3(CStr(x(i - 3, 2)), CStr(x(i - 3, 6)), CStr(x(i - 3, 3)))
cnt1 = cnt1 + 1
For j = 2 To 25
y(cnt1, j - 1) = x(i - 3, j)
Next j
Else
cnt2 = cnt2 + 1
For j = 1 To lCol
z(cnt2, j) = x(i - 3, j)
Next j
End If
Next i
If intData3 = 1 Then
Dim rc As Integer
rc = MsgBox("在庫棚へ戻しますか?", vbYesNo + vbQuestion, "確認")
If rc = vbYes Then
'----配列yをシートへ書き出す
Range("A4").Resize(lRow, lCol).Value = z
n = Sheets(2).Cells(Rows.Count, 2).End(xlUp).Row
For i = 1 To cnt1
For j = 2 To 25
Sheets(2).Cells(n + i, j).Value = y(i, j - 1)
Next j
Next i
Else
MsgBox "処理を中断します"
End If
End If
End Sub
No.2ベストアンサー
- 回答日時:
>フォーム内のテキストボックスに入力した内容をシート4内の該当セル(三列目)に上書きする方法
Dim 該当行 as long
該当行=3
Worksheets("シート4").Cells(該当行, 3).Value = UserForm4.TextBox1.Value(文字列として使うなら、.Text)
シート名がシート4のC3にテキストの値が書き込まれます。
シートインデックス4になら
Worksheets(4).Cells(該当行, 3).Value = UserForm4.TextBox1.Value
よく読んでないけど、
>(2)はシート4に記述されており
グローバル変数なんとかなら、全部フォームモジュールに書けばいいのでは?
困りそうな、シートイベントがトリガーになる処理は無いかと思いますが。
lRow = Cells(Rows.Count, 2).End(xlUp).Row
など、この辺をしっかりシートを明示しする(Withで括る)とか、
手を入れなくてはいけない所はあるようですが、、
No.1
- 回答日時:
>シート4内の該当セル(三列目)に上書きする
読むの疲れた。どこ?
って言うか、Option Explicit あるのに
エラー出ませんか??
グローバル変数とか言う前にデバックしてください。(わかるから)
Sheet4 って何?変数?.付けられるしーーーーーー、何?
Sheet4.intData3 = 0 この意味教えてください。
これだけ、コード掲示するなら、せめてちゃんとして。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
VBAのoffsetの動き方について教...
-
Excelの中央値の複数条件について
-
エクセルのワークシートが重く...
-
Excel VBAを使った重複行の抜き...
-
エクセルファイルを軽くする方法
-
Excel 複数のシートからグラフ...
-
エクセル マクロを使って日々...
-
ピボットテーブルから抽出デー...
-
エクセル 毎日更新する表のデ...
-
エクセル シフト勤務表から、...
-
Excel:グラフの元データをグル...
-
2つ条件である文字の値を参照し...
-
Excelの選択肢をポップアップリ...
-
複数のシートからデータを抽出...
-
テキストボックス内の文字のふ...
-
Excelで数値→文字列変換で指数...
-
エクセルにおける、グラフの指...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
Excel 複数のシートからグラフ...
-
ExcelVBAで、指定したシートに...
-
Excelの中央値の複数条件について
-
Excel ハイパーリンク先のセル...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセルのワークシートが重く...
-
VBAでシート名をセルから取得し...
-
エクセルで入力→日付を自動判別...
-
質問:特定文字列から空白行ま...
-
エクセル自動の年月
-
エクセル シフト勤務表から、...
-
エクセル マクロを使って日々...
-
VBAのoffsetの動き方について教...
-
エクセルVBA:表の内容を担当者...
-
Excel日付変更との参照先の連動
-
EXCEL VBA 一致しないデータの...
-
エクセルについて質問です 日付...
-
Excelの選択肢をポップアップリ...
おすすめ情報
(2)はシート4に記述されており,シート内のデータは三行目がデータのラベル,それ以下がデータで,列は全部で25列あり,一列目がデータを選択するためのチェックボックス替わりで記述内のIf not cells(i, 1).value = "" Thenでチェックが入っているか判別しています.
UserForm4のupdatedata3にはチェックが入っている行のデータの2、6、3列目の文字列を上からセットしています.
今回わからないのは,UsreForm4に表示されているデータのうち「保管場所」のデータをフォーム内のテキストボックスに入力した内容をシート4内の該当セル(三列目)に上書きする方法がわからないということです.