皆様こんばんは。
下記のxの中にyの有無を調べて、条件分岐したいのです。
変数xの中身: 2, 5,18,・・・nm
カンマで区切られた半角数字(整数)が文字列として入っています。
0(ゼロ)は含まず、1~9は数字の前に半角スペースを入れています。
数字はランダムですが、並びは昇順で二桁までとしています。
変数yの中身:1~99
半角数字(整数)で数値または文字列です。
セルの直接検索(FIND)も考えましたが、セル位置を特定するのも大変かなと思ってます。
まだ構想中で具体的にどうするか(どうなるか)を決めていないのですが
よろしくご教示下さい。
Excel2010でVBA初心者です。
No.1ベストアンサー
- 回答日時:
こんな感じでしょうか?
xの中にyの有無を調べる関数を作成して呼んでいます。
Sub test()
Dim x As String, y As String
x = "2, 5,18,20,30,40nm"
' y = "20" '文字列
y = 20 ' 数値
If contains(x, y) Then
MsgBox "見つかりました"
Else
MsgBox "見つかりません"
End If
End Sub
Function contains(x As String, y As String) As Boolean
Dim x1 As String
Dim e As Variant
Dim f As Boolean
x1 = Replace(x, " ", "") ' 空白を削除
x1 = Replace(x1, "nm", "") ' nm を削除
f = False
For Each e In Split(x1, ",")
If CStr(e) = y Then
f = True
Exit For
End If
Next
contains = f
End Function
No.2
- 回答日時:
No1の方と同じようにxの文字をばらして個々に検査する方法になります。
Option Explicit
Public Sub sample()
Dim x As String
Dim y As String
Dim z As Variant
Dim i As Long
Dim flag As Boolean
x = "2, 5,18,20,99"
y = "20"
z = Split(x, ",")
flag = False
For i = 0 To UBound(z)
If CLng(z(i)) = CLng(y) Then
flag = True
Exit For
End If
Next
If flag = True Then
MsgBox ("xの中にyが含まれています")
Else
MsgBox ("xの中にyが含まれていません")
End If
End Sub
No.3
- 回答日時:
No.1です。
> Functionって他にも作れるのでしょうか?
もちろん作れますよ。
プログラムの構成や規模によっては、関数やプロシージャ(Subのことね)で機能毎に分割したほうが全体の見通しが良くなりますね。
> CStr(e)はどのような意味なのでしょうか?
For Eachの中でカンマで分割した配列から一個の要素を取り出す変数eをVariant型で宣言しています。
CStrは括弧の中のデータを文字型に変換する関数です。
If CStr(e) = y では文字列を比較するので、CStr(e)と書いてeの中身を文字列型に変換することを明示しています。
明示はしなくても自動変換されて動作すると思いますが、明示することで後々プログラムをみた時に、ここで文字列の比較をしていることが判り易くなります。
今回は小さなプログラムなのであまり関係ないですが……。
要はプログラムの保守性の問題ですね。
あと、nmの前にカンマがあるのでしたら、
> x1 = Replace(x1, "nm", "") ' nm を削除
は無くても良いです。(あっても良い)
こんにちは。
ワークシート関数とVBAのfunctionとで「関数」が2つあるのですね。
CStrにも意味があるのがよくわかりました。
丁寧なご解説ありがとうございました♪
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで=より左の文字を一括で...
-
エクセルで文字列をtxtファイル...
-
エクセルでアルファベットか数...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
sedなどで、特定の文字列の後の...
-
C言語で文字列の中の文字列のカ...
-
Left関数とRight関数を合わせた...
-
アクセスで特定の数字以外(複...
-
Excelで3E8を3.00E+8にしない方...
-
【Excel VBA】複数ある特定の文...
-
マクロ処理でのループの記述に...
-
VBA2005 16進を2桁で表示したい。
-
Excelで偶数行だけ文字列を数え...
-
VBScript 数値の少数化
-
MS SQLServer のSQLで文字列の...
-
エクセルで文字列の最大値を抽...
-
StringGridで選択した箇所の文...
-
textboxユーザーコントロールの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
[C言語]fputsとfprintfの違い
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
エクセルで文字列の最大値を抽...
-
Excelはなんで先頭の0を消すん...
-
MS SQLServer のSQLで文字列の...
-
エクセル 数値データを桁をそ...
-
Left関数とRight関数を合わせた...
-
VBA2005 16進を2桁で表示したい。
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
sedなどで、特定の文字列の後の...
-
【Excel VBA】複数ある特定の文...
-
OnTime 使用時のプロシージャへ...
おすすめ情報
(訂正)
変数xの中身: 2, 5,18,・・・,nm
nm(最大99)の前にカンマが抜けていました...。
こんばんは。早速のご回答、誠にありがとうございます。(動作良好ですが、補足に書いてスミマセン)
>xの中にyの有無を調べる関数を作成して呼んでいます。
>If contains(x, y) Then
> Function contains(x As String, y As String) As Boolean
関数をsiffon9さんが自作したって事なのでしょうか??
Functionって他にも作れるのでしょうか?
関数を作るってトコロがちょっと衝撃的です...。
>If CStr(e) = y Then
CStr(e)はどのような意味なのでしょうか?