質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

642閲覧

VBA 数値が入力されているセルを探しユーザーフォームに表示させたい

usamix

総合スコア3

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/07/28 13:59

編集2020/07/28 14:02

前提・実現したいこと

ExcelVBAについての質問です。
数式が入力されている列に、誤って数値が入っていないかチェックし(文字列はOK)、
もし数値があればそのセルアドレスをユーザーフォームに表示させたいと思っています。

できれば、ユーザーフォーム内で選択したときにそのセルへジャンプしてくれればいいなと思っていますが
うまく出来ず詰まってしまいました。

どのようにすれば、この問題を解決することが出来るでしょうか。
アドバイスよろしくお願いいたします。

現在の状況

検索については下記が理想に一番近いです。

VBA

1Range("H:H").SpecialCells(xlCellTypeConstants, xlNumbers).Select

動作や結果についてはいろいろと検索した結果、下記が一番近いです。

VBA

1Set FoundCell = Cells.find(What:="任意") 2If FoundCell Is Nothing Then 3 MsgBox "計算式列に数値入力は見つかりませんでした" 4 Exit Sub 5Else 6 Set FirstCell = FoundCell 7 Userform1.ListBox1.AddItem FoundCell.Address & vbTab & FoundCell.Value 8End If 9 10Do 11 Set FoundCell = Cells.FindNext(FoundCell) 12 If FoundCell.Address = FirstCell.Address Then 13 Exit Do 14 Else 15 Userform1.ListBox1.AddItem FoundCell.Address & vbTab & FoundCell.Value 16 End If 17Loop

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tosi

2020/07/28 23:09

(参考) >セルへジャンプしてくれればいい・・・・ form起動にはModal/Modelessがあります。 UserForm1.Show (vbModal) UserForm1.Show (vbModeless) ジャンプ後の操作が変わります。チェックした方が良いかも知れません。
guest

回答2

0

ベストアンサー

どのタイミングで実行するか不明なので、
ユーザーフォームのコマンドボタンをクリックすると表示するようにしました。

vba

1Option Explicit 2 3Private Sub CommandButton1_Click() 4 Dim FoundCells As Range 5 On Error Resume Next 6 Set FoundCells = Range("H:H").SpecialCells(xlCellTypeConstants, xlNumbers) 7 If Err.Number = 1004 Then 8 MsgBox "計算式列に数値入力は見つかりませんでした" 9 Exit Sub 10 End If 11 On Error GoTo 0 12 13 With Me.ListBox1 14 .Clear 15 .ColumnCount = 2 16 Dim FoundCell As Range 17 For Each FoundCell In FoundCells 18 .AddItem FoundCell.Address 19 .List(.ListCount - 1, 1) = FoundCell.Value 20 Next 21 End With 22 23End Sub 24 25Private Sub ListBox1_Change() 26 If IsNull(Me.ListBox1.Value) Then Exit Sub 27 Range(Me.ListBox1.Value).Select 28End Sub

投稿2020/07/28 19:19

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usamix

2020/07/29 03:19

早速動作を確認したところ、理想の動作をしてくれました! Err.Numberを用いる方法などは思いつきもしなかったので、もっと勉強したいと思います。 ありがとうございました!
mako1972

2020/07/29 03:20

くだらないことをする日曜プログラマの点綴的な例ですな。
guest

0

この場合は、worksheetchangeイベントでその都度msgboxなどで
警告・判定したらよろしいと思います。
Uerformを使いたい気持ちは尊重しますが、
正直、どうでもいい質問です。

投稿2020/07/29 00:15

編集2020/07/29 00:16
mako1972

総合スコア383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

usamix

2020/07/29 06:31 編集

既に完成しているデータに対するアプローチで考えていましたので worksheetchangeを使用するという考えに及びませんでした また、質問時の言葉足らずを反省いたしました。 ですがこれから新しく作成するデータに対してはイベントを用いて警告を出したいと思います! 確かにそちらのほうが正しいアプローチだと感じました。 ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問