[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のテキストボックスを同列に最終行を取得後、転記させたい』(フィロ)
首記の件についてご回答お願い致します。
過去ログを調べてみましたが、私の力では見つけられませんでした。
参考サイトでも構いません。
ユーザーフォーム テキストボックスの入力値を、
指定列の最終行に転記するには下記のコードで可能と思いますが
With Worksheets("サンプル") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
テキストボックスが10個の場合、同じA列で上記コードど同じ作業を実現したいです。
また、最終的には下記の様な、表の実現をしたいと思っております。
a b c
果物 りんご
みかん
バナナ
同じユーザーフォーム内で種類というテキストボックス項目内に「果物」別の各テキストボックスには品名を入れます。
その品名の最終行(品名数)に比例した数だけ、「果物」の文字列をコピーしたいです。
(実現例)
a b c
果物 りんご
果物 みかん
果物 バナナ
< 使用 Excel:Excel2016、使用 OS:Windows10 >
With Worksheets("サンプル") lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 End With
念のための解説ですが、これは「サンプル」というシートのA列の最大行から上方向に見ていって最終行(の行番号)を求め、「lastRow」という変数に代入しているもので、テキストボックスの内容を出力しているものじゃないです。。
基本的なことは、ご自身でおわかりになるようですから、上手く行かないコードの全体を乗せて、皆さんに添削してもらうのが意外と近道かもしれません。
(もこな2) 2018/08/12(日) 17:41
担当者を入力
↓
訪問先を入力
↓
シート一覧では、訪問先の数(データ入力数)に応じて
担当者を転記
(フィロ) 2018/08/12(日) 18:03
何かの足しにでもなれば幸甚です ^^ 外していましたらご容赦下さりませ m(__)m Sub test() Dim sh01 As Worksheet Dim i As Long, j As Long Set sh01 = Worksheets(1) j = sh01.Cells(sh01.Rows.Count, 1).End(xlUp).Row + 1 j = IIf(j = 2 And Cells(1) = "", 1, j) With UserForm1 For i = 2 To 10 sh01.Cells(j, 1) = .Controls("TextBox1").Text sh01.Cells(j, 2) = .Controls("TextBox" & i).Text j = j + 1 Next End With End Sub (隠居じーさん) 2018/08/12(日) 18:44
よければ解説をお願いしたいです。
j = IIf(j = 2 And Cells(1) = "", 1, j)
With UserForm1 For i = 2 To 10 sh01.Cells(j, 1) = .Controls("TextBox1").Text sh01.Cells(j, 2) = .Controls("TextBox" & i).Text j = j + 1 Next End With
このあたりから少し難しいです。いずれにせよ、とても感謝しております。
(フィロ) 2018/08/13(月) 11:59
jは書き出し行番号(最終行は何もないときは1が返る)なので
jが2で最初の行が空白の場合は1にそれ以外はjの現在の値のまま。と云う意味だと思います。
詳しくはVBA 三項演算子で見てくださいね
次は
ユーザーフォームのコントロール(TextBox)の名前を使い10個のテキストボックスを
一括処理しています
https://oshiete.goo.ne.jp/qa/4879649.html
なんかが参考になるかもです。
(隠居じーさん) 2018/08/13(月) 13:35
(隠居じーさん) 2018/08/13(月) 21:58
大変感謝しております。
新規シートで上記コードを実行したところ
A列(TextBox1固定)の数がTextBox2〜からの数に比例していらず
ユーザーフォームに設置されたTextBoxの数分が転記されてしまいます。
この辺りのコードをご教授頂ければ幸いであります
(フィロ) 2018/08/15(水) 15:36
え〜と ^^;
Sub test() Dim sh01 As Worksheet Dim i As Long, j As Long Set sh01 = Worksheets(1) j = sh01.Cells(sh01.Rows.Count, 1).End(xlUp).Row + 1 j = IIf(j = 2 And Cells(1) = "", 1, j) With UserForm1 For i = 2 To 10 If .Controls("TextBox" & i).Text <> "" Then sh01.Cells(j, 1) = .Controls("TextBox1").Text sh01.Cells(j, 2) = .Controls("TextBox" & i).Text j = j + 1 End If Next End With End Sub でしょうか (隠居じーさん) 2018/08/15(水) 16:58
Dim sh01 As Worksheet Dim i As Long, j As Long Set sh01 = Worksheets(1) j = sh01.Cells(sh01.Rows.Count, 1).End(xlUp).Row + 1 j = IIf(j = 2 And sh01.Cells(1) = "", 1, j) With UserForm1 For i = 2 To 10 If .Controls("TextBox" & i).Text <> "" Then sh01.Cells(j, 1) = .Controls("TextBox1").Text sh01.Cells(j, 2) = .Controls("TextBox" & i).Text j = j + 1 End If Next End With End Sub
(隠居じーさん) 2018/08/15(水) 17:14
こんばんは ^^ お気づきかもしれませんが ご質問にわたしが解る範囲で単にお答えしているだけで。私のコードは決して 実用的、汎用的では有りません。参考の足しにでもしていただければ幸甚です。 私の性格があまり考えが深くない。。。あまり使用環境の把握が出来ていません ^^; 例。。。固定のTextBox1に入力ミス若しくは何らかの理由で空白のまま処理を 続けると想定外の結果になるかもしれません。 いろいろ試して見てくださいね。 j = sh01.Cells(sh01.Rows.Count, 1).End(xlUp).Row + 1を ↑ここ j = sh01.Cells(sh01.Rows.Count, 2).End(xlUp).Row + 1に 変えてみてください。 さま つけ はご辞退申し上げます。ハンドル名がすでに’さん’がついていますので 【隠居じーさん】でお願いいたします。 でわ m(__)m (隠居じーさん) 2018/08/15(水) 18:59
Private Sub CommandButton1_Click()
Dim i As Long, Lr As Long With ThisWorkbook.Sheets("サンプル") Lr = .Cells(.Rows.Count, "A").End(xlUp).Row + 1 For i = 2 To 10 If Me("TextBox" & i) <> "" Then .Cells(Lr, "A") = TextBox1 '担当者 .Cells(Lr, "B") = Me("TextBox" & i) '訪問先 Lr = Lr + 1 End If Next i End With End Sub
(TAKA) 2018/08/18(土) 10:37
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.