先ほどはご質問した件は解決しました。ありがとうございました。
しかしながら、、、今度は、昨日まででなかったエラーが急に出るようになりました。
ListBoxには、2列あり、1列目が「氏名」で、2列目が「時刻」です。元データは「h:mm」形式なので、文字列に変換してそのまま表示しています。
1列目は、TextBox1 = ListBox1.Text として、テキストボックス1にそのまま氏名が表示されます。
2列目を、TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text として、
テキストボックス2に、
TextBox2 = Format(Worksheets("基本").Range("B:B").Offset(0, 7), "h:mm")
を入れて、変換できるようにしてみましたが、
エラーにはなりませんが表示されません。
昨日まではちゃんと表示されていたのに、急にでなくなりました。。
Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = ListBox1.Text
TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text
昨日まではこれで時刻も表示していたのですが、、時刻が表示されなくなりました、。
それで、
以下のように試してみても、だめです。方が違いますとか、、エラーがでます。
Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = ListBox1(ListBox1.ListIndex, 0)
TextBox2 = ListBox1(ListBox1.ListIndex, 1)
次に、
Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = Worksheets("基本").Range("B:B")
TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text
とすると、エラーは出ませんが、テキストボックスに表示されません。。
何度もすいませんですが、、これの何がだめだと言われているのか、わからなくなりました、、
No.5
- 回答日時:
どちらのサイトを参考にされて勉強しているのかはわかりませんが、個人的には
よねさんのWordとExcelの小部屋
http://www.eurus.dti.ne.jp/~yoneyama/
最初の頃はこちらを参考にさせて頂きました。
まぁ確かに内容的に違った回答手法をしてきた点で言うのなら、VBAを初めて1ヶ月ほどたってからサイトの回答者を初めました。
当時は出来の悪いコードしか書けませんでしたけど、そのコードに対して別の常連回答者様が指摘・指南をしてくださり、それぞれの回答者様のやり方を吸収しつつテキストファイル等に保存し見直してコード作成をしてました。
基本今でもその保存しているコードを引っ張り出して部分的に修正し回答しています。
ただ途中数年はVB・VC#の方にはまり込んでやってましたので、その時のやり方をVBAでも実践したりもしてます。
当然新しい手法で回答したのであればそのコードは保存して溜め込んではいますけど。
情報を頂きまして、まことにありがとうございます。
いつもご回答いただきまして、感謝申し上げます。
サイトを紹介していただきまして、ありがとうございます。
私も、こつこつと修正した構文や、教えてくださった構文やサイトをみて、、としておりますが、いかんせん、まだ理解しきれないものも山のようにありますが、少しずつでも消化していけたらと思います。
今後ともよろしくお願い申し上げます。
No.4ベストアンサー
- 回答日時:
こんばんは!
今回も回答ではありません。
https://oshiete.goo.ne.jp/qa/11941482.html
↑のサイトでも投稿したのですが、
VBAの勉強であれば、色々やってみるのもいいと思いますが、
お礼欄にはあくまで実践でやっていることを題材にしたい!と書かれていましたね。
なので、あえて苦言を呈しますが
お示しのコードは全く実践的ではありませんし、コードそのものがめちゃくちゃです。
一気に高望みをせず順を追って勉強することをおススメします。
まずFind関数の使い方
とりあえず変数を決め(今回はRangeオブジェクトで「c」とすると)
>Set c = Range("B:B").Find(what:=○○, LookIn:=xlValues, lookat:=xlWhole)
(LookIn以降はなくても動くかも・・・)
のような感じ。
次にOffsetの使い方
お示しのコードではB列全体の2列右側(D列)を表示しなさい!
と命令していますが、これでは列全体を表示しなさい!と言っているコトで
無理です。
Offset関数の基本は
Offset(基準,行数,列数,高さ,幅)
という順になるので、もう一度Offset関数の勉強も必要かと・・・
最後に
テキストボックスにリストボックスのデータを表示させたいようですが、
ユーザーフォームだと思いますので、
ユーザーフォームのテキストボックスは
直接入力可能!と解釈した方がいいかも。
すなわち既存のリストにないデータ等を新たに入力する「窓」のような感じ。
次にリスボトックスは絞り込み操作の最終段階だと思いますので、
リストボックスをクリックした時点でワークシートに検索結果を表示する!
といった流れが一般的だと思っています。
※ 上記記述はあくまで当方個人的な考え方なので
すべてがあっているとは思いません。
もちろん色々な使い方をしても問題はないとは思いますが・・・m(_ _)m
ご回答いただきまして、まことにありがとうございます。日々ご回答いただいていることに感謝申し上げます。
本来の使い方があるということさえ、知りませんでした。。^^;基本から逸脱していることも多々あるだろうなぁとは思っておりますが、お付き合いくださっていることに感謝申しあげます。
それ以前に、構文を何をどうしたら動くのかさえ怪しい状態ではありますが、引き続き進めていきたいかと思います。
今後ともよろしくお願い申し上げ余す。
No.3
- 回答日時:
No.2のお礼について。
動画を拝見しました。
こちらは理解できますけど、質問者さんの提示されているコードとは違うものですよね?
ようは With ~ End With がどう言う物なのかと言う点です。
そこを抜いたとしてもこの質問の場合に必要なのは、
>TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text
ではなく
TextBox2 = Worksheets("基本").Range("B:B").Find(ListBox1.Text).Offset(0, 2).Text
こちらならまだわかります。
FindメソッドによりB列の特定のセルを検索しヒットしたセルに対してOffsetで同じ行のD列の値を代入しますので。
No.2
- 回答日時:
昨日までは動いていたとの事。
初級レベルが拝見してもとても不思議な感じがしました。
>TextBox2 = Worksheets("基本").Range("B:B").Offset(0, 2).Text
>昨日まではこれで時刻も表示していたのですが、、
ここでの
Worksheets("基本").Range("B:B")
って”基本”シートのB列全体をのちにOffsetされてますが、結局D列全体のセルに表示されている値を1つのTextBoxに入れるなんて通常考えられないですね。
私が見てきたお古なバージョンの話で最近のは変わったのかなと不思議に感じます。
あとFindメソッドを利用されてますが、見つからなかった場合の処理も覚えられることをお勧めします。
大概の解説記事には”見つかった場合に実行”するような If文 があると思いますよ。
ご回答いただきましてありがとうございます。
https://www.youtube.com/watch?v=QTB6hKHFGao&t=11 …
ここを見て、そのまま使っただけなんですけどね、、
19:10あたりのところを参考にいたしました。
それで、2行分にして動いていたんですけどね、、、
No.1
- 回答日時:
こんにちは
きちんと覚えていないけれど、最近、同じことを何度か指摘されていませんでしたか?
質問履歴が非表示なのでどの質問かは示せませんが、最近のご質問をご自身で見返してみれば、同じような内容があるはずです。
(見た目の形式が同じということではなく、コードの間違え方が同じという意味です)
ご回答いただきありがとうございます。
過去のものは一通りめを通しているのですが、以下の構文で特にエラーは出ないのですが、テキストボックスに表示されない、、昨日までは出ていたんですけどね。
なにか変なチェック入れてないか見てもそうでもなさそうですしね、、
Worksheets("基本").Range("B:B").Find(ListBox1.Text).Select
TextBox1 = Worksheets("基本").Range("B:B").Text
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/20 14:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 10:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Visual Basic(VBA) 複数条件のオートフィルタ(VBA) 2 2022/12/09 15:40
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 16:59
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- その他(プログラミング・Web制作) Pythonによる物理の斜方投射の位置座標表示について 2 2023/06/05 12:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
IIF関数の使い方
-
VBAでのリスト不一致抽出について
-
VBマクロ 色の付いたセルを...
-
マクロ 最終列をコピーして最終...
-
VBAを使って検索したセルをコピ...
-
エクセル VBA ユーザーフォー...
-
VBA A列にありB列にないものま...
-
B列の最終行までA列をオート...
-
複数処理 Worksheet_Change(ByV...
-
超難 日付に対するクロス集計
-
文字列の結合を空白行まで実行
-
VBA 値と一致した行の一部の列...
-
空白セルをとばして転記
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA intersect colu...
-
VBAのFind関数で結合セルを検索...
-
オートフィルタをマクロで作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
補足として、2日ぐらい前に、ここでお世話になって、コンボボックスで、「コース」をキーとして選択すると、そのコースで該当する氏名がリストボックスに表示できるように構文を教えて頂きました。
遷移を見ていると、コースが変わると、「値を取得できない」と表示されます。
TextBox1 = ListBox1.Text
とすると、氏名は遷移しても表示されるのですが、時刻を表示させることができないという状況です。
列指定をして表示させようとすると、エラーになるので、、ということです。
Private Sub ListBox1_Change()
Dim n As Range
Dim t As Range
Dim ws As Worksheet
Set ws = Worksheets("基本")
Set n = ws.Range("B:B").Find(ListBox1.Text)
Set t = ws.Range("B:B").Find(ListBox1.Text).Offset(0, 7)
TextBox1 = n.Text
TextBox2 = t.Text
End Sub
これで動きました。。。Find(ListBox1.Text)が抜け落ちておりました、、
さっき、ちこちゃんが怒ってました、、、ナレーション脳内変換しておりました、、、
大変申し訳ございません。。