VB初心者です。
Dim wkStr As String * 10
wkStr = Space(10)
wkStr = subStr(wkStr)
というプログラムでwkStrに返された文字を正確に取得したいと考えています。
たとえば"abcdefg@@@"が返されたら、実際の文字は"abcdefg"だと判断したいのですが、本当は"abcdefg@の可能性もあるので上手く判断できません。(@はスペースです)
サブには必ず10バイトの領域で渡さないといけない制約があり、このサブは変更できません。
数字、アルファベット、記号等の文字コードは全て返される可能性があるので初期化には使用できません。
正確に文字を取得できれば、文字コードで初期化する方法以外でも構わないので、良い方法を教えてください。よろしくお願いします。
No.6ベストアンサー
- 回答日時:
>wkStr = Space(10)
を
wkStr = String(10,0)
に変えれば良い。
String(10,0)は「文字コードが0の文字を10文字並べた文字列」を返す。
「数字、アルファベット、記号等の文字コードは全て返される可能性がある」としても「文字コードが0の文字」は返されません。
Dim OrgStr As String
Dim AnsStr As String
Dim WkStr As String * 10
OrgStr = InputBox("文字列を入力")
WkStr = OrgStr & String(10, 0)
MsgBox (Asc(Mid(WkStr, 1, 1)) & Chr(13) & Asc(Mid(WkStr, 2, 1)) & Chr(13) & Asc(Mid(WkStr, 3, 1)) & Chr(13) & Asc(Mid(WkStr, 4, 1)) & Chr(13) & Asc(Mid(WkStr, 5, 1)) & Chr(13) & Asc(Mid(WkStr, 6, 1)) & Chr(13) & Asc(Mid(WkStr, 7, 1)) & Chr(13) & Asc(Mid(WkStr, 8, 1)) & Chr(13) & Asc(Mid(WkStr, 9, 1)) & Chr(13) & Asc(Mid(WkStr, 10, 1)))
MsgBox Len(WkStr)
AnsStr = Mid(WkStr, 1, InStr(1, WkStr, Chr(0), vbBinaryCompare) - 1)
MsgBox "[" & AnsStr & "]"
MsgBox Len(AnsStr)
を実行してみましょう。
「Len(WkStr)」は、常に「10」を返します。3文字の文字列を入力しても「10」を返します。
WkStrが「ちゃんと10文字ある」のは「Asc(Mid(WkStr, 10, 1))」が成功しているので判ります。9文字以下しか無い場合はエラーになります。
「Len(AnsStr)」は、常に「10以下の入力した文字列の長さか、10」を返します。3文字の文字列を入力したら、ちゃんと「3」を返し、AnsStrは「OrgStr & String(10, 0)」により付け足した「10バイトの領域を埋める為の、余計な物」が取り除かれています。
No.4
- 回答日時:
ANo.2です。
時間差でANo.1に書き込まれていたようですが…
「あくまでsubStrには10文字の空白(または何か他の文字?)を渡して、
subStrで何かをして、subStrが何か文字列を返してくるが、
その戻り値を時と場合によって加工したい」
…んですよね?
>しかもスペースでも関数から返されたスペースである場合は削らずに取得したいのです。
については、元々の質問から判断すると削除したいようにしか取れないのですが、
「条件によっては」削除したいのでしょうか?
>たとえば"abcdefg@@@"が返されたら
とありますが、これはsubStrの戻り値の事かと思うのですが、それでいいのでしょうか?
>実際の文字は"abcdefg"だと判断したい
の「実際の文字」というのは、最終的なwkStrの値なのでしょうか?
それとも質問には記載されていない、何か別の要素なのでしょうか?
あと、この状態は、Spaceを削除した状態ですよね?
それとも、単純な削除ではない、別の判定方法から、この状態にしたいのでしょうか?
>本当は"abcdefg@の可能性もあるので上手く判断できません
この場合は、どうなるのが正解なんでしょう?
ともあれ、やりたい事や、「実際の文字」を作成する際の条件などを、
もっと明確にしてください。
これでは回答するのが難しいです。
No.3
- 回答日時:
VBの変数は初期化の必要がありません。
例えば
Dim wkStr As String
skStr="abcdefg"
もし空白で初期化の必要なら、TRIM関数を使うとスペースを削除できます。
skStr="abcdefg@@@@" '(@はスペース)
wkStr=trim(wkStr)
No.2
- 回答日時:
>サブには必ず10バイトの領域で渡さないといけない
この「サブ」とは、subStrの事でいいんですかね?
あと、
>数字、アルファベット、記号等の文字コードは全て返される可能性があるので初期化には使用できません。
とありますが、空白で初期化するのは問題ないのですか?
書かれたコードのままだと、関数に渡す文字列は固定なので、引数としての
意味は無いも同然ですが、実際には wkStr は色々な文字列が有り得るのでしょうか?
ちょっと、やりたい事が見えにくい感じです。
ともあれ、まず、固定長文字列にする必要は無いと思います。
半角文字列に空白を追加して強制的に10文字にしたければ、以下のようにやればいいです。
Dim wkStr as String
:
(ここでwkStrの内容を ひとまず設定)
:
wkStr = Left(wkStr & Space(10), 10)
固定長文字列を使うとしても、subStrの戻り値が可変長のようなので、
その戻り値を固定長文字列に入れるのは、宜しくは ないかと。
別の変数を定義することが問題にならないのであれば、そうすればいいと思います。
この内容と、ANo.1で書かれている内容が、求めている回答から外れているなら、
もう少し状況が良く分かる補足をお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語について。
-
C言語について。
-
ダブルクォーテーションを文字...
-
文字列の後ろから必要分だけ削...
-
文字列にアルファベットが何文...
-
Accessのクエリで、replace関数...
-
関数によって、MAX_PATHの値が...
-
右から何文字目にあるか文字位...
-
strcmp( )関数について教えて...
-
VS C++6.0のCString にて先頭1...
-
エクセルで、特定の文字列より...
-
エクセル関数で記号から記号の...
-
C言語でギリシャ文字は使えます...
-
VB 文字判別
-
VB2008 文字列に等間隔にスペ...
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
i=cells(Rows.Count, 1)とi=cel...
-
count(*)で取得した値をJAVAの...
-
テキストボックスのvalueとtext...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのクエリで、replace関数...
-
文字列の後ろから必要分だけ削...
-
UNICODE文字が含まれているかの...
-
ダブルクォーテーションを文字...
-
文字列にアルファベットが何文...
-
エクセル関数で記号から記号の...
-
strcmp( )関数について教えて...
-
awk で右端の文字を1文字削除...
-
C言語でギリシャ文字は使えます...
-
右から何文字目にあるか文字位...
-
VBからACCESSのレポートを印...
-
文字数と単語数を数えるプログラム
-
VBScriptでXcopyしたいのですが
-
◆COUNTIF関数またはダブルクォ...
-
秀丸マクロで、ダブルクォーテ...
-
エクセルのマクロでセルに数式...
-
テキストの文字列検索で、検索...
-
CSVの禁則文字
-
環境依存文字?をEnumで定義したい
-
GetDlgItemTextについて
おすすめ情報