VBAデータフォームテキストボックスの表示方法

このQ&Aのポイント
  • VBAデータフォームを利用してテキストボックスの内容を表示する方法について教えてください。
  • データフォームを使用して修正マクロを作成していますが、テキストボックスの表示がうまくいかない問題に困っています。
  • テキストボックスの内容が変わらない現象が発生しているため、行が変わった時に該当行の内容を表示させる方法を知りたいです。
回答を見る
  • ベストアンサー

VBA データフォーム テキストBOX内容の表示

VBA データフォーム テキストBOXの内容が旨く表示出来なくて困っています。  お世話になります。  データフォームを使って、シートの修正マクロを作成してます。 フォームにはコードと選択項目の2つのテキストBOXが有り、該当行の修正をしてOKボタンを クリックすると、修正したコードと選択項目はシートに反映されるのですが、以降の行の修正で テキストBOXの表示が1件目のまま変わりません。  行が変わった時に、該当行の内容(コード、選択項目)を表示させる様にしたいのです。 以下VBAのコーディングです。宜しくお願いします。 Dim setIn As Range Dim cnt_A As Long Private Sub CommandButton1_Click() '各項目の入力 Set setIn = ActiveCell.Offset(0, 0) Select Case データ入力.Caption Case Is = "コード 入 力" cnt_A = cnt_A + 1 'フォームにコードをセット With setIn(cnt_A) .Value = Sample_No .Offset(0, 0).Value = Sample_No End With Case Is = "A 入 力" cnt_A = cnt_A + 1 'フォームに項目Aをセット With setIn(cnt_A) '.Value = Sample_No .Offset(0, 1).Value = Sentaku_Koumoku End With Case Is = "B 入 力" cnt_A = cnt_A + 1 'フォームに選択項目Bをセット With setIn(cnt_A) '.Value = Sample_No .Offset(0, 2).Value = Sentaku_Koumoku End With End Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#2、3、cjです。 私の方にも見落としがあったこともあって (#3のコードは私の見当違いだと気が付きました) ますます、混乱してしまいましたので、 原点に戻って、ご提示のコードに書き加えることだけで レスしてみます。 #3の方は、まだ、手を付けていなければ、試さなくていいです。 すみません。 Private Sub CommandButton1_Click()   If setIn Is Nothing Then Set setIn = ActiveCell   Select Case データ入力.Caption   Case "コード 入 力"     cnt_A + 1     setIn(cnt_A, 1).Value = Sample_No.Text     Sentaku_Koumoku.Value = ""   Case "A 入 力"     cnt_A = cnt_A + 1     setIn(cnt_A, 2).Value = Sentaku_Koumoku.Text     Sentaku_Koumoku.Value = setIn(cnt_A + 1, 2).Text   Case "B 入 力"     cnt_A = cnt_A + 1     setIn(cnt_A, 3).Value = Sentaku_Koumoku.Text     Sentaku_Koumoku.Value = setIn(cnt_A + 1, 3).Text   End Select   Sample_No.Value = setIn(cnt_A + 1, 1).Value End Sub > cnt_A = cnt_A + 1 修正対象レコードのインデックスをひとつずつ送る、 というのは理解できました。 > 上から下へのベタ打ち ということですから シート上では「ひとつ下のセル」という意味ですよね? > With setIn(cnt_A) これでは 「ひとつ右のセル」→「ふたつ右のセル」 という意味になってしまうので、修正してます。   Sample_No.Value = setIn(cnt_A + 1, 1).Value Sample_Noは、単純に一つ下のセル値を採ればいいのだと思います。     Sentaku_Koumoku.Value = setIn(cnt_A + 1, 2).Text これで、次のレコードに該当するセル値を表示します。     Sentaku_Koumoku.Value = "" "コード 入 力"モードの場合に、 Sentaku_Koumokuに何を表示するのか判らないので空欄にしています。 以上、これも、可能性が高そうなニーズへの暫定回答です。 (動作は確認していますが、ニーズが確認出来ていません) もしこれで、うまく行かない場合は、 UserForm全体のコードとデザイン、シートのイメージ、の詳細、システム概要 などを添える形で、新たに質問を建ててみてください。 UserFormや他のコントロールのイベントで処理するのが妥当と 思われる内容をコマンドボタンのイベントで処理しているような気がします。 ただ、この回答のコードは、当たらずも遠からず、と思ってレスしていますので、 相違の説明補足あれば対応します。 以上です。

mattbianco2011
質問者

お礼

cj moverさん こんばんは お世話になります。いま仕事から帰って着ました 今日は雨がひどくて大変でしたね。  #4の件了解です。#3でやってみたところ選択項目A,Bのセルに コードが入力され、データフォームのコードのテキストBOXにA,Bで入力した@@やら&&が 表示されました。また手順1として最初に入力するコードのベタ打ちはうまくいきました。  >"コード 入 力"モードの場合に、 Sentaku_Koumokuに何を表示するのか判らないので空欄にしています。  →その通りです。何も入れないです。 明日は夜勤なので、いや、もう今日ですね#4のコーディングで再度試行します。 夜勤は、結構纏った空き時間が取れるので、いつもこの勤務帯にVBAを組んでます。 歴史は夜作られるというわけでではないのですけど、捗ります。  結果をご報告しますので宜しくお願いします。

mattbianco2011
質問者

補足

cj moverさん こんにちは お世話になります。仕事から帰って来て少し休んでこの時間です。  結果OKでした。実はこのファイル、レイアウトが2行で構成されてる少し面倒なファイルで 以下の様な感じで項目か10項目程有ります。 コード A B C D E aaaa1 @@ && AA BB ## この2行      %% $$ ?? で1件  cj moverさんからご教示頂いた#3,#4のコーディングをデータ入力前の画面の所で場合分けして データ入力の画面を同じものを2つ作り#3、#4のコーディングを流用して完成しました。 最後は突貫工事で昔の開発仕事の頃のノリです。もうあの頃みたいに36時間戦えないですけどね。 今朝明けの前に簡単な操作ガイドと一緒に隣の部署の先輩に配布しました。喜んでました。 私もうれしいです。 Cj moverさんに感謝です。ありがとうございます。

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#2、cjです。 #2補足欄へのレスです。 = Sample_No というのが謎でして、この書き方だと Sample_Noは変数のこと、だと思っていたのですが、 ひょっとしてTextBoxのオブジェクト名なのでしょうか? = Sample_No.Text を省略して書いている?とか? 何れにせよ、TextBoxのオブジェクト名が判らないと、 TextBoxにセルの値を表示させる記述を書くことはできませんので ここでは、仮に、Sample_NoがTextBoxのオブジェクト名だった場合 の例で書いてみます。 TextBoxの表示値変更、セル値の変更、によって それぞれChangeイベントなどを発生させますから、 その手のイベント処理をしている場合などは 全体を見て間違いが無いように気を付けてください。 cnt_A = cnt_A + 1 の記述は何を数えているのか、こちらも解りません。 とりあえず、今回は、ダミーサンプルを作成し、 相当量のテストを経て動作を確認しています。 が、ニーズに合ったものになっているのか、については自信ありません。 Private Sub CommandButton1_Click() Dim colOffset As Long   Set setIn = ActiveCell   colOffset = -1   Select Case データ入力.Caption   Case "コード 入 力": colOffset = 0   Case "A 入 力": colOffset = 1   Case "B 入 力": colOffset = 2   End Select   If colOffset = -1 Then Exit Sub   cnt_A = cnt_A + 1 ' ?   setIn.Offset(0, colOffset).Value = Sample_No.Text   Sample_No.Value = ActiveCell.Offset(1, colOffset).Value   ActiveCell.Offset(1, 0).Select End Sub

mattbianco2011
質問者

お礼

cj moverさん おはようございます。 お世話になります。いろいろなご指摘とても感謝しております。  なにしろ20年以上前に、今ではレガシー言語と言われているCOBOL,p/L1などで仕事をしてた頃 のメソッドでやっていて(今は工場勤務です)、となりの部署の先輩の応援としての開発なのです。 錆付いた脳に油を差しながら、といった感じです。 >Sample_Noは変数のこと、だと思っていたのですが、 ひょっとしてTextBoxのオブジェクト名なのでしょうか?  →その通りです。省略して書いてました。コードの所です。 >cnt_A = cnt_A + 1 の記述は何を数えているのか、こちらも解りません。  →これは行を下にずらすような、改行の様なイメージの記述です。要らないのかも知れません。  職場にデータが有り、今日は夕方から深夜までの勤務で再度試す予定です。 結果を報告しますので宜しくおねがいします。  

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。お邪魔します。 ご提示のコードの読解だけで手直ししたものを挙げてみます。 質問文や補足でもはっきりとは書かれていないのですが、  「CommandButton1をClickしたら」  「処理対象(ActiveCellと右隣2セルのどれか)に」  「Sample_No の値を設定する」 これに加えて  「次の処理対象として1行下のセルを指定する」 ということで宜しいのでしょうか? ' ' ========================= Dim setIn As Range Dim cnt_A As Long Private Sub CommandButton1_Click() ' ' 各項目の入力 Dim colOffset As Long   Set setIn = ActiveCell.Offset(0, 0)   colOffset = -1   Select Case データ入力.Caption   Case "コード 入 力": colOffset = 0   Case "A 入 力": colOffset = 1   Case "B 入 力": colOffset = 2   End Select   If colOffset = -1 Then Exit Sub   cnt_A = cnt_A + 1 ' ' フォームにコードをセット   setIn(cnt_A).Offset(0, colOffset).Value = Sample_No   ActiveCell.Offset(1, 0).Activate End Sub ' ' ========================= ActiveCell を基準にすべての処理が始まっていますから   ActiveCell.Offset(1, 0).Activate という風に ActiveCell を下に送ってやるのが 現状から一番簡単な対処です。 ご提示のプロシージャは、 3つの項目にそれぞれデータを入力する目的で書かれていますが、  ひとつのレコード(行)について3つの項目を入力し終えてから  次のレコード(行)へ移動 するというようなこと(なのか、それとも?)まで書かれていません。 その点、このままでいいのでしょうか? 通常は、 ■1■  単項目のデータを出力するコマンドボタンと  次のレコード(行)に移動するコマンドボタンと  別に組合わせて使う とか、 ■2■  単項目のデータを出力するコマンドボタンと  単項目のデータを出力するとともに次のレコード(行)に移動するコマンドボタンと  別に組合わせて使う とか、 ■3■  ひとつのコマンドボタンで  単項目のデータを出力するとともに  対象レコード(行)の項目データがすべて埋まっていれば  次のレコード(行)に移動する などのような設計になるものと思います。 現在のコードでは、ひとつの項目を入力する度に 次のレコード(行)に移動するようになっています。 これについては、 何か他のコントロールイベントなどで手当てされているのでしょうか? ■1■、■2■については必要ならコントロールを増やして 現行コードをアレンジするだけです。 ■3■については   ActiveCell.Offset(1, 0).Activate の部分を   If Application.CountA(ActiveCell.Resize(, 3)) = 3 Then     ActiveCell.Offset(1, 0).Activate   End If のようにすることで、 「3項目すべて入力済の場合だけ次のレコード(行)に移動する」 ようになります。 3例挙げましたが、他にも色々な設計があるでしょう。 そういったイメージが判らないままの回答ですので、 食い違いがあれば、補足してください。 また、私が提示したものは"現状から一番簡単で無難な対処" という意図で書かれています。 全体がイメージできれば色々工夫の余地はあるとは思います。 とりあえず、試してみて、求める結果とどう違うか、です。 以上です。

mattbianco2011
質問者

補足

cj moverさん こんばんは。今仕事から帰って着ました。 説明不足で申し訳ありません。  データの入力手順として、1コードの入力->上から下へのベタ打ち 2、項目A,Bそれぞれ 1と同様上から下へのベタ打ち で入力してます。 ここでは示さなかったのですが、このフォームの前に項目選択のフォームを用意してあり コード、項目A,Bそれぞれオプションボタンを設けて選択することで、項目A、Bの入力、修正を行うように しております。 但し大前提としてコードの入力が最初です。 現状では、入力も修正もできるのですが、OKした後、データ入力のテキストBOXのコード及び 選択項目が最初に選択したコードの次の行を表示しないため、目くらで入力しているような感じ になってます。 >ひとつのレコード(行)について3つの項目を入力し終えてから 次のレコード(行)へ移動するというようなこと  →各項目どれかです。3つすべてではありません。 因みに頂いたVBA のコーディングで試したところ、入力が反映されず、いままで動かなかったセルが 水澄ましのように下に動いていきました。 仕様としてはシンプルと思うのですが、頭が固くてうまく行きません。 宜しくおねがいします。

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.1

>行が変わった時に、該当行の内容(コード、選択項目)を表示させる様にしたいのです。 →With setIn.Offset(cnt_A, 0)ではないでしょうか。 推測で答えているところがありますので、外している場合は、実行イメージを頂きたいです。

mattbianco2011
質問者

補足

hirotnさん こんばんは。早速の回答ありがとうございます。   イメージとしては    シートの内容         コード   A B aaaa1 && $$ bbbb1 ** ## cccc1 ?? %% dddd1 !! ?? 以下に続く の様な感じで例えばcccc1から選択項目bの%%を修正して、下段に行が変わった時、データフォームのコードのテキストBOXにはdddd1と表示させたいのです。選択項目Bも同様です。 > →With setIn.Offset(cnt_A, 0)ではないでしょうか。 試しましたが、上の例でcccc1の%%を##と入れて見た所、dddd1の所に入力され、またテキストBOXのコードもcccc1で変わりませんでした。  なかなかうまくいかなくて参ってます。(<_>) 

関連するQ&A

  • セルの内容をテキストボックスに表示する

    こんにちは。今月からVBAを少しずつ勉強し始めている初心者です。 VBAでA列のセルをダブルクリックすると、そのセルにチェックが入り、 ユーザーフォームを起動させる。といったコードを記述しました。 チェックが入る→フォームが起動までは良いのですが、入力済みのセルをWクリックした時にフォームのテキストボックスににセルの内容を表示させようとしているのですがうまくいきません。不具合の内容は、フォームに表示されるデータが、前回Wクリックした行のデータが表示されます。例えば、 1回目 ID50を選択→表示されない。 2回目 ID70を選択→ID50が表示される。 3回目 ID90を選択→ID70が表示される。といった具合です。 コードは下記です。Targetが前回を参照しているのだと思って調べてみたのですがよく分かりません。すみませんがご教示お願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lngTop As Long, lngLeft As Long, strTitle As String Const RangeName As String = "領収書" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "レ" Then Target = "" Target.Offset(0, 9).ClearContents Else Target = "レ" End If End If If Target.Count <> 1 Then Exit Sub  If Target.Column <> 1 Then Exit Sub   If Target <> "レ" Then Exit Sub 入力F.Show With Worksheets("送付名簿") 入力F.TextBox1.Value = Target.Offset(0, 1).Value 入力F.TextBox3.Value = Target.Offset(0, 2).Value 入力F.TextBox4.Value = Target.Offset(0, 3).Value 入力F.TextBox5.Value = Target.Offset(0, 5).Value 入力F.TextBox6.Value = Target.Offset(0, 4).Value 入力F.TextBox7.Value = Target.Offset(0, 6).Value 入力F.TextBox10.Value = Target.Offset(0, 7).Value 入力F.TextBox9.Value = Target.Offset(0, 8).Value End With End Sub

  • エクセル VBAのチェックボックスについて

    お読みくださり、ありがとうございます。 エクセル初心者でございます。 エクセルのマクロなのですが、 お詳しい方、是非教えて欲しいです!汗 調子に乗って入力フォームなるものを作りました。 入力フォームの中にて、チェックボックスで「ある」「なし」の項目を入れてみたのですが、チェックしていないのに、値が入る現象が起きています汗 以下、素人が書いたコードを恥を承知で記載させていただきます。 Private Sub CheckBox1_Click() If CheckBox1.Value = True Then OK = "○" End If End Sub Private Sub CheckBox2_Click() If CheckBox2.Value = True Then NO = "×" End If End Sub Private Sub UserForm_Click() End Sub '以下のコードは、登録ボタンがクリックされたときの処理! Private Sub 登録ボタン_Click() If TextBox1.Text = "" Then MsgBox "グッズ名を入力してください。" Exit Sub End If If TextBox2.Text = "" Then MsgBox "アプローチ先を入力してください。" Exit Sub End If With Worksheets("協賛グッズ") With Cells(Rows.Count, 2).End(xlUp) .Offset(1, 0).Value = TextBox1.Text .Offset(1, 1).Value = mori .Offset(1, 2).Value = mori2 .Offset(1, 3).Value = TextBox2.Text .Offset(1, 5).Value = TextBox3.Text .Offset(1, 6).Value = TextBox4.Text .Offset(1, 7).Value = TextBox5.Text .Offset(1, 8).Value = TextBox6.Text End With End With TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub 以上です。 おかしなところ満載かと思いますが、 チェックを入れた項目だけ値を入れたいと考えております。 おわかりになるかたおりましたら何卒お助けください汗 よろしくお願いいたします。

  • エクセル ユーザーフォームテキストボックスについて

    テキストボックスからセルへの入力について教えていただきたいのですが、 ネットからサンプルを落として勉強しております。 以下のコードを下の画像のように見出しを3から7まで項目を増やしたい場合、 どの部分を書き換えたらいいのでしょうか? よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim LASROW As Long Dim f As Long With Worksheets("Sheet1") 'A列の最終行を取得 LASROW = .Range("A" & CStr(Rows.Count)).End(xlUp).Row 'セルに書き込み For f = 0 To 2 .Range("A" & CStr(LASROW)).Offset(1, f).Value = Me.Controls("TextBox" & f + 1).Value Next End With 'TextBox1,2,3をクリア For f = 1 To 3 Me.Controls("TextBox" & f).Value = "" Next 'TextBox1にフォーカスを移動 Me.TextBox1.SetFocus End Sub

  • エクセルVBAユーザーフォーム「テキストボックス」「コンボボックス」の書式設定について

    ユーザーフォームを作成して、出荷実績を投入しようとしています。 現在、ユーザーフォームを作成して、 上から以下のようにボタンが並んでいます。 (1)コンボボックス1  商品コードと商品名を選択する。 (2)テキストボックス1~7  地域ごとの出荷実績を投入する。 (3)コマンドボタン1  決定→入力 (4)コマンドボタン2  終了 そして、以下3つの問題点がありますが、どのようにVBAを記述したら良いのか、わかりません。  a.コンボボックス1に表示される商品を商品コード   (アルファベット)と商品名で改行したい。   つまり「折り返して全体を表示する」ことは出来ないでしょうか。  b.「AAAA~」は5行目・「CCCC~」は7行目 といった   ように、商品ごとに値を投入する行を変更したい。  c.テキストボックス1~6の内容の合計が自動で(入力している   最中に)テキストボックス7に表示されるようにしたい。 次のようなVBAは記述出来たのですが、上記3つの要素を加えるには どのようにしたらよいのか、教えていただけないでしょうか? ちなみに入力する順番は次のようになっています。(設定済み) M4→L4→J4→K4→H4→I4 →M5→L5→J5→K5→H5→I5 ------------------------------------------------------------- ’フォームを表示させる。 Sub formdsp() UserForm1.Show End Sub ’フォーム内容 Dim cnt As Integer Private Sub Combobox1_Change() End Sub '入力ボタン Private Sub CommandButton1_Click() With ActiveSheet .Cells(cnt, 13) = TextBox1.Text .Cells(cnt, 12) = TextBox2.Text .Cells(cnt, 10) = TextBox3.Text .Cells(cnt, 11) = TextBox4.Text .Cells(cnt, 8) = TextBox5.Text .Cells(cnt, 9) = TextBox6.Text .Cells(cnt, 15) = TextBox7.Text cnt = cnt + 1 .Cells(cnt, 13) = Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox2.Text = "" UserForm1.TextBox3.Text = "" UserForm1.TextBox4.Text = "" UserForm1.TextBox5.Text = "" UserForm1.TextBox6.Text = "" UserForm1.TextBox7.Text = "" UserForm1.Combobox1.Text = "" UserForm1.TextBox1.SetFocus End Sub '終了ボタン Private Sub CommandButton2_Click() Unload Me End End Sub 'コンボボックス Private Sub userform_initialize() cnt = 4 With UserForm1.Combobox1 .AddItem "AAAA 11111111111" .AddItem "BBBB 22222222222" .AddItem "CCCC 333333333" .AddItem "DDDD 444444" .AddItem "EEEE 5555555555" .AddItem "FFFF 666" .AddItem "GGGG 7777777" .AddItem "HHHH 88888" .AddItem "IIIII 999999999" .AddItem "JJJJ 0000000000000" .AddItem "KKKK 1111" .AddItem "LLLL 222222" .AddItem "MMMM 3333" End With End Sub

  • Excel・VBA フォーム入力で空欄によるエラーをなくすには?

    Excelで商品一覧表を作成し、フォームで入力できるようにしたいです。 登録ボタンを押すと、最終行に商品名等が各セルに入力されますが、 フォーム内の項目で、空欄箇所があるとエラーになってしまいます。 フォームで空欄箇所は空欄で処理できるようにしたいのですが、どのようにすればよいでしょうか? VBA初心者です。よろしくお願いします。 Private Sub commandbutton登録_Click() Worksheets("商品一覧表").Activate Range("A65536").End(xlUp).Offset(1, 0). SelectOffset(0, 0) = txt商品名.Value .Offset(0, 1) = CCur(txt価格.Value) .Offset(0, 2) = CLng(txt数量.Value) .Offset(0, 3) = txt詳細.Value .Offset(0, 4) = txt備考.Value

  • リストボックスの内容を検索したいが...

    エクセル2019を使っています。 添付画像のようにユーザーフォームにテキストボックスとリストボックスを作り、テキストボックスに入力した文字でリストボックスの内容を検索しようとコードを作成しました。 Private Sub TextBox1_Change() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row .Range("A1").AutoFilter 1, "*" & TextBox1.Value & "*" If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Set rng = .Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible) Else Me.ListBox1.Clear Exit Sub End If End With Me.ListBox1.Clear With Me.ListBox1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row Set rng = .Range("A2:A" & LastRow) End With With Me.ListBox1 .ColumnCount = 1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With ListBox1.ListIndex = 0 End Sub とりあえず検索はできるのですが、使用されていない文字や記号を入力したあとにバックスペースキーで入力した文字や記号を削除するとリストボックスの内容が意図した内容で表示されません。 どこを修正したらいいでしょうか。

  • エクセルVBA テキストボックス

    いつもお世話になっております。 エクセルでVBAを使いユーザーフォームのテキストボックスで 文章入力をしようと思っているのですが、少しトラブルがありましたのでお教え願います。 エクセルシートの横がa~k、縦を9~34までのシートを結合して その中にテキストボックスで入力した文章を入れるように作っています。 MultiLineとEnterKeyBehaviorをTrueにして Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub Private Sub UserForm_Initialize() TextBox1.Value = Range("a9").Value End Sub Private Sub UserForm_Activate() With Me .Left = Application.Left .Top = Application.Top .Left = .Left + 350 .Top = .Top + 80 End With End Sub という状態になっているのですが、文章を入力して16行目で改行するとシートの方で「#VALUE!」と出てきてしまうので一旦ユーザーフォームを閉じてもう一度フォームを立ち上げると 「実行時エラー’-2147352571(80020005) Valueプロパティが設定できません。種類が一致しません。」 と出てきます。 デバッグすると  Private Sub CommandButton1_Click() → UserForm1.Show  End Sub と出てきます。 なにがおかしいのでしょうか? 今回初めてVBAを作っているので初歩的な間違いかもしれませんがよろしくお願いします

  • このVBAコードの解説をお願いします。

    特定の行の中で同じものが続いたらセルを結合する、ということがやりたくて 以下のコードをネット上から探してきました。 上記の動作は実現できたのですが、自分でこのコードをみてもイマイチわかりません。 お分かりになる方、できれば1行ずつ解説してください。 よろしくお願いします。 Sub Sample() Dim myRng As Range, myRow As Long Set myRng = Range("A1") For myRow = 1 To Cells(Rows.Count, 1).End(xlUp).Row With Cells(myRow, 1) If .Value = .Offset(1).Value Then Set myRng = Union(myRng, .Offset(1)) Else Application.DisplayAlerts = False myRng.Merge Application.DisplayAlerts = True Set myRng = .Offset(1) End If End With Next End Sub

  • VBA ユーザーフォーム

    VBA初心者です。以下の様なソースを見つけました。この場合は、文字を検索するとD1 にその該当番号が表示されます。 ※A列には番号、B列には文字列 そうではなく、そのクリックした行のA列にセルが移動し、ユーザーフォームが閉じられる様にできますでしょうか? よろしくお願い致します。 Private Sub ListBox1_Click() Sheets("Sheet1").Range("D1").Value = ListBox1.Value End Sub Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Dim v() As Variant Dim c As Range Dim k As Long ListBox1.Clear With Sheets("Sheet1") With .Range("A1", .Range("A" & .Rows.Count).End(xlUp)) ReDim v(1 To 2, 1 To .Rows.Count) For Each c In .Cells If c.Offset(, 1).Value Like TextBox1.Value & "*" Then k = k + 1 v(1, k) = c.Value v(2, k) = c.Offset(, 1).Value End If Next If k = 0 Then MsgBox "指定の値は存在しません" Else ReDim Preserve v(1 To 2, 1 To k) ListBox1.List = WorksheetFunction.Transpose(v) End If End With End With End Sub

  • VBのテキストボックスの内容をExcelのセルに書き加える

    VBを実行し、フォームのテキストボックスに入力された文字列を あらかじめ読み込んでおいた既存のExcelシートのセルに 書き足したいです。 そのExcelシートのセルにはすでに「001」などの数字が 入っているのですが、その数字の前に「AB01」などの文字列を付け加えたいのです。 自分なりに作ってみましたがうまくいきません。 とりあえずソースを載せます。 わかる方いらっしゃいましたらよろしくお願いします。 Private Sub Command1_Click() Set xlApp = CreateObject("Excel.Application") xlFileName = strFileName Set xlBook = xlApp.Workbooks.Open(xlFileName) Set xlNameSheet = xlBook.Sheets.Item(1) cnt = 0 i = xlNameSheet.Range("A1").CurrentRegion.Rows.Count For i = 1 To 65 shusseki = xlNameSheet.Cells(i, 5).Value If IsNumeric(shusseki) Then cnt = cnt + 1 For j = 1 To 5 xlNewSheet.Cells(cnt, j).Value = xlNameSheet.Cells(i, j).Value xlNewSheet.Cells(cnt, 1).Value = Form10.Text1 Next j End If Next i xlApp.Visible = True Set xlNameSheet = Nothing Set xlNewSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing End Sub