[[20180812170847]] 『複数のテキストボックスを同列に最終行を取得後、』(フィロ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数のテキストボックスを同列に最終行を取得後、転記させたい』(フィロ)

首記の件についてご回答お願い致します。
過去ログを調べてみましたが、私の力では見つけられませんでした。
参考サイトでも構いません。

ユーザーフォーム テキストボックスの入力値を、
指定列の最終行に転記するには下記のコードで可能と思いますが

    With Worksheets("サンプル")
        lastRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1

テキストボックスが10個の場合、同じA列で上記コードど同じ作業を実現したいです。
また、最終的には下記の様な、表の実現をしたいと思っております。

  a   b   c
 果物 りんご
    みかん
    バナナ

同じユーザーフォーム内で種類というテキストボックス項目内に「果物」別の各テキストボックスには品名を入れます。
その品名の最終行(品名数)に比例した数だけ、「果物」の文字列をコピーしたいです。

(実現例)
  a   b   c
 果物 りんご
 果物 みかん
 果物 バナナ

< 使用 Excel:Excel2016、使用 OS:Windows10 >


私にはやりたいことがよく解りませんでしたが、少なくとも
>ユーザーフォーム テキストボックスの入力値を、
>指定列の最終行に転記するには下記のコードで可能と思いますが
とありますが、提示の部分は最終行を取得しているのであって、転記はしてませんけどそこは大丈夫ですか?
あと、余計なお世話かもしれませんがRowsの前にドットを一つ追加されたほうがよいと思います。
    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


最終行の次から書き込まなければいけないので最終行に+1しています
初回は1+1で2になり書き出しが
二行目からになるのを防ぐためです。

jは書き出し行番号(最終行は何もないときは1が返る)なので
jが2で最初の行が空白の場合は1にそれ以外はjの現在の値のまま。と云う意味だと思います。
詳しくはVBA 三項演算子で見てくださいね

次は
ユーザーフォームのコントロール(TextBox)の名前を使い10個のテキストボックスを
一括処理しています
https://oshiete.goo.ne.jp/qa/4879649.html
なんかが参考になるかもです。

(隠居じーさん) 2018/08/13(月) 13:35


>>ユーザーフォームのコントロール(TextBox)の名前を使い10個のテキストボックスを
済みません
9個でしたねTextBox1は固定でしたです。
m(__)m

(隠居じーさん) 2018/08/13(月) 21:58


隠居じーさんさま

大変感謝しております。
新規シートで上記コードを実行したところ
A列(TextBox1固定)の数がTextBox2〜からの数に比例していらず
ユーザーフォームに設置されたTextBoxの数分が転記されてしまいます。
この辺りのコードをご教授頂ければ幸いであります

(フィロ) 2018/08/15(水) 15:36


空のTextBoxの場合は、カウントしないで入力された分だけ、転記し
固定のTextBoxは、TextBox2〜に入力された分だけ転記したいです。
(フィロ) 2018/08/15(水) 15:40

 え〜と ^^;

 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

追伸。。。済みません
セルのシート指定を一か所失念致しておりました
IIF。。。の行です 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 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.