A、Bという文字列があるとしてBがAに含まれると1を出力
、BがAに含まれないと0を出力するプログラムを作りたいのですが、どういうプログラムを書けばいいのかわかりません。
例
A=(a1,a2,a3)
B=(a1,a2)
上記のA,Bという集合があるとして、BはAに含まれるので1を出力します。
A=(a1,a2,a3)
B=(a4,a5)
上記のA,Bという集合があるとして、BはAに含まれるので0を出力します。
出力のメッセージはメッセージボックスを使おうと思っています。
基本的な質問かもしれませんがどうか教えてください。
よろしくおねがいします。
No.10ベストアンサー
- 回答日時:
#7>
(A,B,C)を(65,66,67)に変換
↓
syugou = (65,66,67)に設定
上記のような流れはプログラムでどのようにするのでしょうか?
文字の集合を数字の集合として設定できる
-------------------------------------------------
上記のsyugouというのを何で表すか、ということで変わってくると思います。
#5のプログラムでは、また文字列に(ChrWで)戻しています。
数値で表すということであれば、配列を使うということになるのでしょうね。
VBでは、
dim syugou(256) as long
の様に宣言して
syugou(0)=65
syugou(1)=66
syugou(2)=67
の様に格納し
if 65=syugou(0) then
の様に呼び出すことになります。
参考になれば
No.11
- 回答日時:
いわゆる正規表現で出来ます。
Function IsAtoF(ByVal s As String) As Boolean
IsAtoF = Not (s Like "*[!A-F]*")
End Function
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=434913
No.9
- 回答日時:
No.8ですが一部誤りがありましたので
修正します
----------------------------------------------------------
Dim i As Long 'カウンタ変数
Dim FLG As Boolean
FLG = True
For i = 1 To Len(A)
If InStr(B, Mid(A, i, 1)) = 0 Then
'文字列Aは文字列Bに存在しない文字を含んでいる
MsgBox "0"
FLG = False
Exit For
End If
Next
'文字列Aは文字列Bに存在する文字しか含まない
If FLG Then MsgBox "1"
No.8
- 回答日時:
No2のものです
気になったので私も作成してみました
'--------------------------------------------------------
Dim i As Long 'カウンタ変数
Dim FLG As Boolean
FLG = True
For i = 1 To Len(B)
If InStr(B, Mid(A, i, 1)) = 0 Then
'文字列Aは文字列Bに存在しない文字を含んでいる
MsgBox "0"
FLG = False
Exit For
End If
Next
'文字列Aは文字列Bに存在する文字しか含まない
If FLG Then MsgBox "1"
'--------------------------------------------------------
こんな感じになりましたがどうでしょうか??
的を得ていたら良いのですが...
No.7
- 回答日時:
#5>Boolean,pos,ret,astring,AscWなどはどういう意味のプログラムなのですか?
>astringはstringとは違うのでしょうか?
まず、dim の並びに書かれている名前は、この変数を使いますよという宣言です。
変数には、変化する値(数字や文字列など)を入れます。
aStringは、
dim aString as String
と書いてありますので、
Stringとして使用する変数ですよという意味です。
この場合Stringは型でaStringは変数の名前です。
作業用に使う文字列というだけで特にそれ以上の意味はないです。
pos,retも同じく変数で
posは、文字列の中での文字位置を保持するために使っています。
retは、関数自体の値を保持するものです。
Booleanも型で、true,Falseのどちらかの値をとります。
IFの条件部分などで使うと成立、不成立を表します。
if 5=5 THEN
と
if true THEN
は、同じ意味になります。
AscWは、文字をUNICODEで文字コードに表す値を返す関数です。
この問題で
"A-E"などで範囲を表すために
"A-E"を"ABCED"に変換しなければなりませんが、
"A"とか、文字のままでは計算できません。
ASC("A")などとすることでその文字コード65を取り出すことができます。
文字コードは、基本的に並びになっているので、文字コードASC("E")になるまで数字を足せば、次の文字コードを作り出すことができます。
詳しく説明してくれてありがとうございます。
しかしまだNo.5のプログラムが完全には理解できません。
aStringやpos,retは自分で決めた変数の名前だったのですね。
ASCは文字をアスキーコードの数字に変換しているということなのですね。
>"A-E"などで範囲を表すために
>"A-E"を"ABCED"に変換しなければなりませんが、
>"A"とか、文字のままでは計算できません。
これはBとCとDにもアスキーコードが設定されているからということなんですね。
ただいまアスキーコードについて調べているのですが、検索してもアスキーコード表ばかりひっかかってしまいます。
(A,B,C)などの集合をアスキーコードに変換して、ひとつの値にまとめるというやり方はどのように行うのでしょうか?
(A,B,C)はアスキーコードに変換すると(65,66,67)なんですよね?
(A,B,C)を(65,66,67)に変換
↓
syugou = (65,66,67)に設定
上記のような流れはプログラムでどのようにするのでしょうか?
説明してあるHPでもよいのでどうか教えてください。
質問ばかりで申し訳ありません。
上記のプログラムが分かれば文字の集合を数字の集合として設定できると思うので、自分のプログラムにもいかせると思います。
No.5
- 回答日時:
'作ってみました
'使い方
'if isInclude("abced","bd") then MsgBox 1 else MsgBox 0
'isInclude("a-d","ad") →true
'isInclude("A-D","ad") →false
'isInclude("A-D","ad",ignoreCase:=true) →true
'isInclude("AbD","BD",true) →true
'isInclude("あ-お","あお")→true
'isIncludeは、文字列を集合と見立ててその要素(文字)が含まれているかを判断する
'mother には、"a-z"のような表記を許す
'compareIgnore をtrue で指定した場合は文字の比較で大文字小文字を同一視する、初期値は、同一視しない
Function isInclude(mother As String, child As String, Optional ignoreCase As Boolean = False) As Boolean
Dim cLen, pos, ret
Dim aString As String, makeString As String, replaceString As String
Dim startCode, endCode, code
aString = mother
pos = InStr(mother, "-")
Do Until pos = 0
replaceString = Mid(aString, pos - 1, 3)
startCode = AscW(Mid(aString, pos - 1, 1))
endCode = AscW(Mid(aString, pos + 1, 1))
makeString = ""
For code = startCode To endCode
makeString = makeString & ChrW(code)
Next
aString = Replace(aString, replaceString, makeString)
pos = InStr(aString, "-")
Loop
If ignoreCase Then
aString = UCase(aString)
child = UCase(child)
End If
cLen = Len(child)
ret = True
For pos = 1 To cLen
code = Mid(child, pos, 1)
If InStr(aString, Mid(child, pos, 1)) = 0 Then ret = False: Exit For
Next
isInclude = ret
End Function
解答ありがとうございます。
Boolean,pos,ret,astring,AscWなどはどういう意味のプログラムなのですか?
astringはstringとは違うのでしょうか?
自分の使っている本には載ってなかったので使用例などが書いてあるサイトなど
があったら教えてください
どうかおねがいします
No.4
- 回答日時:
#3さんが言われているようにBというのを集合と表現するのがまずいのではないでしょうか?
B="abcdef"なのか
B(0)="a"
B(1)="b"
B(2)="c"
B(3)="d"
B(4)="e"
B(5)="f"
なのかをまずはっきりさせて頂けますでしょうか?
上記の例だと
InStr(mid(A,i,1),B)でAの個数分繰り返してチェックすれば出来るでしょうし、
下記の例だと
mid(A,i,1) = B(j)でIF文でのチェックになるのではないかなぁ???
解答ありがとうございます。
集合の表現が悪かったのですね。
B="abcdef"でおねがいします。
もうひとつ質問なのですが
B="abcdef"はB="a-f"と書けるのですか?
mid関数というものはある文字列から、x番目の文字列をy文字分抜き出すというものですよね。
yは2でxはiなのですか?
No.3
- 回答日時:
質問文は、文字列が含まれるか?
だけど、例は集合になっているので、
どういうことなのか、補足して欲しい。
例えば、instr関数は、
"ABCD"に"BC"は見つけるけど
"AD"は見つけられません。
単純にinstrではだめなのではないかと想像するが…
あと、確認したいのは、文字列を集合を保持しているとするのかということ。
この回答への補足
解答ありがとうございます。
申し訳ありません、私の説明が悪かったです。
もう一度書き直してみます。
Aがその都度、自分で設定する入力のようなもので2文字からなる文字列を入力します。
例 A=ab(aとbは普通の文字です、変数ではありません)
そしてBがはじめから決定している文字の集合です。
例 B=(a,b,c,d,e,f,g)(上と同様にそれぞれ普通の文字です、変数ではありません)
そしてBの中から文字を2つ選び、文字列を作り、それがAと同じならメッセージボックスで1と出力するプログラムです。
上の2つの例を使うと
A=ab
B=(a,b,c,d,e,f,g)
この場合Bからaとbという文字を選びabという文字列ができるのでメッセージボックスに1と表示されます。
例2
A=ad
B=(a,b,c,d,e,f,g)
(これも上と同様にa,b,c,d,e,f,gは変数ではなく普通の文字です)
この場合もBからaとdという文字を選びadという文字列ができるのでメッセージボックスに1と表示されます。
例3
A=cj
B=(a,b,c,d,e,f,g)
(これも上と同様にa,b,c,d,e,f,g,jは変数ではなく普通の文字です)
この場合はBからcは選ぶことができますが、jはないのでcjという文字列を作ることができないのでメッセージボックスに0と表示されます。
いろいろとわかりにくいと思いますがどうかおねがいします。
tomoさん、kachimiさん深く考えもせずお礼をいってしまってすいませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【EXCEL】=セル&セルが上手く表示できない。 7 2022/09/04 21:32
- Excel(エクセル) Excelについて▶あるセルに文字を入力すると、別のセルに色がつく(条件付き書式) 1 2022/03/27 16:43
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
アクセスで特定の数字以外(複...
-
エクセルで文字列の最大値を抽...
-
VBAでの Replace関数で、ワイル...
-
VBA2005 16進を2桁で表示したい。
-
【Excel VBA】複数ある特定の文...
-
文字列からタブコードを取り除...
-
textboxユーザーコントロールの...
-
A B C D E の五文字のすべてを...
-
SQL の Update文(?) と ...
-
エクセル 数値データを桁をそ...
-
アクセスでのインポート時の改...
-
同一セル内に関数と文字列を同...
-
OnTime 使用時のプロシージャへ...
-
【COBOL】文字列から数値項目に...
-
MS SQLServer のSQLで文字列の...
-
“丸(〇/○/◯)”に似た文字…
-
リストボックスの文字列の取得
-
wordマクロ 文字列A~文字列Bを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
エクセルで文字列をtxtファイル...
-
【Excel VBA】複数ある特定の文...
-
エクセル 数値データを桁をそ...
-
Excelで3E8を3.00E+8にしない方...
-
VBA2005 16進を2桁で表示したい。
-
エクセルで文字列の最大値を抽...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
VBの「As String * 128」とは?
-
エクセルでセル内の文字列の最...
-
ORCLEでの小数の表示方法の変更...
-
bashスクリプトでの文字列から...
-
LEFT関数で文字数を指定しない...
-
アクセスで特定の数字以外(複...
おすすめ情報
