「夫を成功」へ導く妻の秘訣 座談会

いつもお世話になっております。
初歩的質問かも知れませんが、宜しくお願いします。

EXCEL2007使用。

Sheet2に下記のような値があります。

   A    B    C    D    E
1 あか  きいろ みどり みどり  しろ
2 しろ        しろ   しろ   くろ
3 しろ        あか   しろ   あお
4 きいろ       あお   しろ   あお
5 くろ                   あか
6 くろ                   あお
7                      しろ

A1:E7までの範囲の値を、
Sheet1にあるテキストボックス(またはコンボボックス)に縦に表示したいのです。
A~Eの複数の列の値には空白も含まれていて、
縦一列に値を表示するにも、空白を省く処理ですでに躓いております。

何か良い方法がありましたら、
ぜひご教授お願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

テキストボックスって、シートに貼り付けたテキストボックスでいいですか?



Sub sample()
  Dim vData As Variant
  Dim oTextbox As OLEObject
  Dim nFlag, i, j
  
  'テキストボックスを探す(今回は最初に見つけたテキストボックスが対象)
  nFlag = 0
  For Each oTextbox In Worksheets("Sheet1").OLEObjects
    If TypeName(oTextbox.Object) = "TextBox" Then
      nFlag = 1
      Exit For
    End If
  Next
  If nFlag = 0 Then
    MsgBox ("テキストボックスがありません")
    Exit Sub
  End If
  
  oTextbox.Object.Value = "" 'テキストボックスのクリア
  oTextbox.Object.MultiLine = True '念のため複数行をTrueに
  
  'テキストボックスに値を入れる
  vData = Worksheets("Sheet2").Range("A1:E7")
  For i = 1 To 5
    For j = 1 To 7
      If vData(j, i) <> "" Then
        oTextbox.Object.Value = oTextbox.Object.Value & vData(j, i) & vbCrLf
      End If
    Next j
  Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
思った通りになりました。
空白を詰める方法がどうしてもわからず、
四苦八苦していましたが・・・
こんな方法があったとは。
本当に勉強になります。
ありがとうございました。

お礼日時:2011/07/15 11:13

ListBox(またはコンボボックス)を配置し,プロパティで


ColumnCountを5
ColumnWidthを例えば45;45;45;45;45
ListFillRangeにSheet2!A1:E7
と設定してみます。
「VBA 複数のセルの値をテキストボックス」の回答画像2

この回答への補足

ありがとうございます。
素人の私にも直下的に理解できるものでした。
しかし、私の求めている結果とは少し違います。
値を全て縦に表示したいのです。
A列の値の下にB列の値といった感じです。
A1:E7の範囲内の値を、空白のない状態で詰めて
縦表示することはできませんか?

説明不足で申しわけありません。
宜しくお願いいたします。

補足日時:2011/07/15 11:01
    • good
    • 0
この回答へのお礼

今回はmt2008様の方法で対処いたしましたが、
keithin様の方法も大変勉強になりました。
またわからないときは質問させていただきますので、
その時は宜しくお願いいたします。
ありがとうございました。

お礼日時:2011/07/15 11:16

一例です。


A1→B1→C1~A2→B2~E7順です。

For Each a In Range("A1:E7")
If a.Value <> "" Then
テキストボックス転送
Endif
Next
    • good
    • 0
この回答へのお礼

ありがとうございました。
変数の型で躓くほどの素人ですが、
良い参考となりました。
自分なりに改良して頑張りたいと思います。

お礼日時:2011/07/15 11:07

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

Q[エクセルVBA]セルの値をテキストボックスに表示

よろしくお願いします。

ユーザーフォームを使って作業しています。
その中で、コンボボックス1で指定した名前を検索値として、VLOOKUPを使ってあるシート(例:シート名「時間検索」)からセルの値をテキストボックスに表示させるようにしたいのです。

コードを作成し表示させることはできたのですが、セルに入っている値の書式が「[h]:mm」の時間形式(例:19:00)のためか、セルの値を引っ張ると小数点(例:0.79166....)で表示されます。

色々と調べてみた中で、format関数を使ったりしてみたんですが不首尾に終わっています。

なんとかテキストボックスに、セルと同じ形式で表示したいのですが、どのように考えればよろしいでしょうか?
ご教示お願いいたします。

質問の仕方が悪かった場合は補足・訂正させていただきますので、どうぞよろしくお願いします。

Aベストアンサー

方法1
textbox1 = format(application.vlookup(combobox1, worksheets("シート名").range("検索対象範囲"),列,false), "[h]:mm")


方法2
dim r as long
r = application.match(combobox1, worksheets("シート名").range("左端列:列"), 0)  ’★
textbox1 = worksheets("シート名").cells(r, "欲しい列番号").text

★言わずもがなですが
 range("A:A")のように列:列指定して検索すれば直接の行番号が取得できる
 range("A4:A10")のように範囲指定したときは,勿論その先頭セルからの移動量が取得される


方法3
dim h as range
set h = worksheets("シート名").range("左端列").find(what:=combobox1, lookin:=xlvalues, lookat:=xlwhole)
if not h is nothing then
textbox1 = h.offset(0, 列数).text
end if




#各方法共通:
Comboboxの値は「文字列」なので,シート上の「数値」を検索する場合は変換が必要です

方法1
textbox1 = format(application.vlookup(combobox1, worksheets("シート名").range("検索対象範囲"),列,false), "[h]:mm")


方法2
dim r as long
r = application.match(combobox1, worksheets("シート名").range("左端列:列"), 0)  ’★
textbox1 = worksheets("シート名").cells(r, "欲しい列番号").text

★言わずもがなですが
 range("A:A")のように列:列指定して検索すれば直接の行番号が取得できる
 range("A4:A10")のように範囲指定したときは,勿論その先頭セルからの移動量が取得される


方...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Qエクセル・VBAでテキストボックスに入力された文字を

エクセル・VBAでテキストボックスに入力された文字を
B列から検索し、結果をユーザーフォームのリストbox
に表示したいのですがうまくいきません
検索は部分一致・大文字小文字無視で行いたいです
よろしくお願いします

Aベストアンサー

部分的に一致していても、リストに追加するように出来ますか?
If Range("B" & i).Value = TextBox1.Value Then

If Range("B" & i).Value Like "*" & TextBox1.Value & "*" Then
にするとか

また、表示された1・2列目をクリックすると、そのセル
をアクティブに出来ると良いのですが・・・
No1の方のコードをお借りします。
Private Sub ListBox1_Click()
Range("C:C").Find(what:=ListBox1.Value, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False).Activate
End Sub
とかでは?

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qユーザーフォームの入力をシートに反映

かなりの初心者(始めて3日)ですが宜しくお願いします。
しかも2点あります。。。

(1)ユーザーフォームにある大量のテキストboxないし、optionboxをエクセルのsheet2に反映させたいです。
で、地道に
With Sheets(2)
.Range("A22").Value = OptionButton184.Value
.Range("A23").Value = OptionButton185.Value
.Range("A24").Value = OptionButton186.Value
.Range("A25").Value = OptionButton187.Value
とAの行を手で直していたのですが、途中で間違えて、手直しは断念しました。そこで、思いついたのが、「ひとつ下のセルに記述する」ということでした。
で、本を見ながら考えたのが、
With Sheets(2)
Range("A1").Select
ActiveCell.Offset(1, 0).Value = TextBox1.Text
ActiveCell.Offset(1, 0).Value = TextBox2.Text
ActiveCell.Offset(1, 0).Value = TextBox3.Text
まずA1を指定させて、下にずらしていけるかと思ったのですが、全然上手くいきません。しかもsheet1のA1を選択してるようです。どうしてでしょうか???

(2)フォームOKボタンを押して、上記の処理をしても、フォームに記入したものが次にフォームを開いた時に消えていないように、
Me.Hide
End Sub
で終わらせたのですが、次に開いても残っていません。

無知でお恥ずかしいですが、宜しく御願い致します。

かなりの初心者(始めて3日)ですが宜しくお願いします。
しかも2点あります。。。

(1)ユーザーフォームにある大量のテキストboxないし、optionboxをエクセルのsheet2に反映させたいです。
で、地道に
With Sheets(2)
.Range("A22").Value = OptionButton184.Value
.Range("A23").Value = OptionButton185.Value
.Range("A24").Value = OptionButton186.Value
.Range("A25").Value = OptionButton187.Value
とAの行を手で直していたのですが、途中で間違えて、手直しは断念しました。そこで、思いついた...続きを読む

Aベストアンサー

>まずA1を指定させて、下にずらしていけるかと思ったのですが、全然上手くいきません。しかもsheet1のA1を選択してるようです。どうしてでしょうか???

  With Sheets(2)
    Range("A1").Select
    ActiveCell.Offset(1, 0).Value = TextBox1.Text

多分、Sheet1からこのユーザーフォームが開かれているのでは?
『Range("A1").Select』があり『ActiveCell』を基準にしているので、『With Sheets(2)』が意味をなしていません。
書くなら、
  Sheets(2).Activate
  With Sheets(2).Range("A1")
    .Offset(1, 0).Value = TextBox1.Text
これでSheet2のA2から書き出すはずです。(未確認です)

>で終わらせたのですが、次に開いても残っていません。
『残っていない』のではなく、最初にデザインした状態が再度表示されているわけです。

残すためには、プロパティ『ControlSource』にセルを指定する必要があります。
または、下の例示のように『Initializeイベント』で値を取得する必要があるでしょう。



質問では、オプションボタンやテキストボックスが沢山あるみたいですが、一括で処理する例です。

オプションボタン1~80の値をA1~A80に、
テキストボックス1~80の値をB1~B80に 書き込んでいます。

説明を簡略化するために、オプションボタン等の番号と書き出すセルの行番号を一致させています。

終了後、最後フォームを開いた時に書き込んだ値を取得するために、『Unload』で終わり、
『UserForm_Initialize』で取り込んでいます。コード表現は書き込みと逆ですね。


'Sheet2へ書き込む
Private Sub CommandButton1_Click()
  Dim i As Integer

  With Worksheets(2)
    'オプションボタンの値を書き出し
    For i = 1 To 80
      .Range("A" & i) = UserForm1.Controls("OptionButton" & i).Value
    Next
    'テキストボックスの値を書き出し
    For i = 1 To 80
      .Range("B" & i) = UserForm1.Controls("TextBox" & i).Text
    Next
  End With
End Sub


'Formを呼び出したとき、Sheet2から読み込む
Private Sub UserForm_Initialize()
  Dim i As Integer

  With Worksheets(2)
    'オプションボタンの値を読み込み
    For i = 1 To 80
      UserForm1.Controls("OptionButton" & i).Value = .Range("A" & i)
    Next
    'テキストボックスの値を読み込み
    For i = 1 To 80
      UserForm1.Controls("TextBox" & i).Text = .Range("B" & i)
    Next
  End With
End Sub


'終了ボタン
Private Sub CommandButton2_Click()
  Unload Me
End Sub

>まずA1を指定させて、下にずらしていけるかと思ったのですが、全然上手くいきません。しかもsheet1のA1を選択してるようです。どうしてでしょうか???

  With Sheets(2)
    Range("A1").Select
    ActiveCell.Offset(1, 0).Value = TextBox1.Text

多分、Sheet1からこのユーザーフォームが開かれているのでは?
『Range("A1").Select』があり『ActiveCell』を基準にしているので、『With Sheets(2)』が意味をなしていません。
書くなら、
  Sheets(2).Activate
  With Sheets(...続きを読む

QVBA コンボボックスで選んだ値を取得するには

ユーザーフォーム上のコンボボックスから値を選択し、その値を変数として使いたいのですが、うまくいきません。

コンボボックスのコードで
Private Sub ComboBox1_Change()
moji1 = ComboBox1.Text
Range("A1").Value = moji1
のようにすれば、コンボボックスから値を選んだ時点でA1セルにその値をコピーできるのですが、同じユーザーフォーム上にあるコマンドボタンをクリックして実行する「マクロ1」にてこのmoji1という変数を使いたいのです。

マクロ1にて、上記と同じ
Range("A1").Value = moji1
というコードを記述しても、ユーザーフォームで選択した値が消えており、empty値となってしまいます。

原因をご存知の方はお教えください。

Aベストアンサー

原因については下記を参考にしてください。
http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/eg5.shtml

Qテキストボックスにセルの値を複写する方法

Excel VB (Excel 2007) の質問

Sheet1のセルD1、D2、D3に文字が入力されています。
そして同じシート上の任意の場所にテキストボックスが配置されています。
テキストボックスには"テキスト ボックス 1"、"テキスト ボックス 2"、"テキスト ボックス 3"と名前がつけられています。

セルD1の値を"テキスト ボックス 1"に複写、セルD2の値を"テキスト ボックス 2"に、セルD3の値を"テキスト ボックス 3"に
複写したいのですがどのようにすればいいのでしょうか。

インターネットのQ&Aで調べましたが同じような質問でも難しすぎて理解できません。
例えば以下のように簡単にできないでしょうか。
D1の値を"テキスト ボックス 1"に複写する場合

Range("D1").Select
Selection.Copy
ActiveSheet.Text."テキスト ボックス 1".Activate  'テキストボックスを選択(アクティブ)する記述が解りません。
ActiveSheet.Paste                 ’選択したテキストボックスに貼り付ける方法もわかりません。

勿論上記の記述ではうまくいきません。
VB初心者でお手数をおかけしますがよろしくお願いします。

Excel VB (Excel 2007) の質問

Sheet1のセルD1、D2、D3に文字が入力されています。
そして同じシート上の任意の場所にテキストボックスが配置されています。
テキストボックスには"テキスト ボックス 1"、"テキスト ボックス 2"、"テキスト ボックス 3"と名前がつけられています。

セルD1の値を"テキスト ボックス 1"に複写、セルD2の値を"テキスト ボックス 2"に、セルD3の値を"テキスト ボックス 3"に
複写したいのですがどのようにすればいいのでしょうか。

インターネットのQ&Aで調べましたが同じような...続きを読む

Aベストアンサー

テキストボックスにセルの値を入れるのだけならマクロは必要はありません。
 
【操作手順】
 ・テキストボックスス「テキスト ボックス 1」を選択する。
 ・数式バーで「=D1」を入力して【Enter】キーを押す。

  以上を"テキスト ボックス 2"、"テキスト ボックス 3"を同様に行う。

ネットでも色々説明しています。以下は手順を絵的に説明しています。
http://www.bayclotho.jp/blog/archives/907

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング