• 締切済み

ご指導願います。

エクセルのVBAを勉強中の初心者です。業務上VBAを使用することになりまして、試行錯誤を繰り返していますが、どうも思ったようにいきません。どなたかご指導願います。 現在フォームを使って外観はできています。 ○オプションボタン1  ○オプションボタン2 ○オプションボタン3  ○オプションボタン4 [テキストボックス1] [テキストボックス2] [テキストボックス3] [テキストボックス4] [テキストボックス5]   (次へ)←コマンドボタンでクリック作業が終わるようにしたい このようになっています。尚、オプションボタンの名前別に記録用のシートが用意してあります。 オプションボタンを選択し、テキストボックスを入力して[次へ]を押すと、選択したオプションボタンの名前のシート先に記入したテキストボックスの内容を転送させたいのです。 色々サイトなども調べ、マクロの記録から修正を加えても中々思うようなことができなかったり、エラーがでます。 どなたかご教授願います。よろしくお願い致します。

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.6

#5です >最初に教えて頂いた、オプションコマンドでシート別にふりわけつつも、あるひとつのシートにはずっと転送されるようにしたいんです。 よく分からんが、2箇所に書き出したいの? Private Sub SetTextBoxToSelectSheet(selectSheet As Object) With selectSheet .Cells(1, 1) = TextBox1.Text .Cells(2, 2) = TextBox2.Text .Cells(3, 3) = TextBox3.Text .Cells(4, 4) = TextBox4.Text .Cells(5, 5) = TextBox5.Text End With With Worksheets("あるひとつのシート名") .Cells(1, 1) = TextBox1.Text .Cells(2, 2) = TextBox2.Text .Cells(3, 3) = TextBox3.Text .Cells(4, 4) = TextBox4.Text .Cells(5, 5) = TextBox5.Text End With End Sub

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

#2です userformがformであっても同じことです 結局、Sheet扱いで困っているのでは? >どのオプションコマンドを選んでも同じシートにテキストを転送するのはどうすればいいのでしょうか? Private Sub CommandButton1_Click() If (OptionButton1.Value = True) Then SetTextBoxToSelectSheet Sheet1 ElseIf (OptionButton2.Value = True) Then SetTextBoxToSelectSheet Sheet1 ElseIf (OptionButton3.Value = True) Then SetTextBoxToSelectSheet Sheet1 ElseIf (OptionButton4.Value = True) Then SetTextBoxToSelectSheet Sheet1 End If End Sub 変更する所が間違っています Sheet名はこっちのマクロで変更しています 基本的なスキルを身に付けてから、再度質問されては?

aikagi
質問者

補足

最初に教えて頂いた、オプションコマンドでシート別にふりわけつつも、あるひとつのシートにはずっと転送されるようにしたいんです。

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.4

空白チェックは、例えば、次のようは方法をとります。 '1カラム目の1行目から空白セルを検索し空白セルがあれば文字列("#####")を設定する dim row as Integer for row = 1 to 65535 if (selectSheet.Cells(1, row) = "") then selectSheet.Cells(1, row) = "#####" EndIf また最初のコードは、コマンドボタンが押下されてから動作しますので大丈夫です。VBA起動中はシート自体が触れません。

aikagi
質問者

補足

遅くなりまして申し訳ありません。 まずご指導ありがとうございます。追加なんですが、どのオプションコマンドを選んでも同じシートにテキストを転送するのはどうすればいいのでしょうか? Private Sub SetTextBoxToSelectSheet○○(selectSheet As Object) selectSheet○○.Cells(1, 1) = TextBox1.Text selectSheet○○.Cells(2, 2) = TextBox2.Text selectSheet○○.Cells(3, 3) = TextBox3.Text selectSheet○○.Cells(4, 4) = TextBox4.Text selectSheet○○.Cells(5, 5) = TextBox5.Text End Sub としてもたのですがエラーがでます・・・。 また selectSheet As ObjectをselectSheet○○ としてもダメでした。 ご教授お願いします。

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.3

>一度記録したセルには転送されないようにしたいんですが、cell(1,1)に変数を使えばいいんでしょうか? ご察しの通りCells(1,1)の部分に変数を使うことにより入力先のセル位置が変わります。 データを設定する前に指定位置のCellの内容を確認して空白だったら入力するということも可能です。

aikagi
質問者

補足

空白だったら入力する方法を、ぜひ教えてください。 後、最初に教えていただいたコードなんですが、私の見解ですと、記録用シートを選択したらマクロが自動で動いてしまいそうなんですが、大丈夫なんでしょうか・・・? 記録したシートを利用してオートフィルタなどで検索システムとして構築したいので・・・。 説明不足かもですが、ご教授願います。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>エクセルのVBAを勉強中の初心者です。 初心者にUserformの使用は難しいと思います まずはUserformをシートに置き換えて シート間で、処理ができるのかを確認してみては シート上で処理ができれば シ-トをUserformに セルを各コントロールに置き換えれば コードはできると思います

aikagi
質問者

補足

Userformではなくて、ツールにコントロール ツーツボックスとフォームってありませんか? そのフォームの方を使用しています。

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.1

コマンドボタン(次へ)が押された際に次のような処理を行えば可能かと思います。 ' コマンドボタンが押下された際に呼び出されるイベントルーチン Private Sub CommandButton1_Click() If (OptionButton1.Value = True) Then SetTextBoxToSelectSheet Sheet1 ElseIf (OptionButton2.Value = True) Then SetTextBoxToSelectSheet Sheet2 ElseIf (OptionButton3.Value = True) Then SetTextBoxToSelectSheet Sheet3 ElseIf (OptionButton4.Value = True) Then SetTextBoxToSelectSheet Sheet4 End If End Sub ' 指定のシートに対して、テキストボックス内のデータを設定する Private Sub SetTextBoxToSelectSheet(selectSheet As Object) selectSheet.Cells(1, 1) = TextBox1.Text selectSheet.Cells(2, 2) = TextBox2.Text selectSheet.Cells(3, 3) = TextBox3.Text selectSheet.Cells(4, 4) = TextBox4.Text selectSheet.Cells(5, 5) = TextBox5.Text End Sub

aikagi
質問者

補足

むぅ。中々難しそうですね。 コード内容が理解できない部分があります。でもありがとうございます。ひとつづつ理解していこうと思います。 追加で質問いいでしょうか?一度記録したセルには転送されないようにしたいんですが、cell(1,1)に変数を使えばいいんでしょうか? またご教授お願いします。

関連するQ&A