• 締切済み

文字列の並び換え

Visual BASIC 6で 文字列の並び換えの方法がわかりません 文字列には半角も全角もあって数字もあります。 if A$ < B$ then ではだめです。

  • LHS07
  • お礼率96% (565/587)

みんなの回答

回答No.6

#4のひとも言ってますが 質問者が希望する「比較のルール」が不明なのです。 >文字列には半角も全角もあって数字もあります ということですが ・アルファベットの大文字と小文字は区別するのか?同一とみなすのか?("A"と"a") ・アルファベットの半角と全角は区別するのか?同一とみなすのか?("A"と"A") ・カタカナとひらがなは区別するのか?同一とみなすのか?("ア"と"あ") ・アルファベットと数字ではどちらが大きいとするのか? など、いろいろな比較ルールが考えられます。

noname#215107
noname#215107
回答No.5

ようやくやりたいことが何となくわかってきましたが、 >if A$ < B$ then >ではだめです。 VBでは文字コードの大小で比較しますが、動作はしますよね。 これではダメ=「ルールに関して不満」ということでしょうか。これについても質問に書かれていないので良く分かりません。 具体的にはどうすれば満足するのでしょうか。 例;全角の数字は、半角の数字と同列に扱いたい → StrConvを使って、半角へ統一して比較

LHS07
質問者

お礼

ありがとうございます。

noname#215107
noname#215107
回答No.4

>?$とB$との並び換えです。 >A$のなかでの並び換えではありません。 質問に書いていないから、無限の想像をしてしまうのです。 並び替えたい文字列が2つしかないわけではありませんよね? まずは条件を明確にしましょう。 データは何件あるのか。どこに保存されているのか。 A$とB$は何に使っているのか? どういう順番で並べたいのか(例:昇順、降順、ランダムでもいいのか) それとも単にA$とB$の内容の大小を比較する方法についての質問なのか?(並び替えはどうでもいいですよね)

LHS07
質問者

お礼

DIM lyr$(100,4) のなかで LYR$(1,1)、LYR$(2,1)、LYR$(3,1)、LYR$(4,1)、LYR$(5,1)・・・・・・・ を並べ替えたいのですが 文字列A$とBSが昇順ないしは降順に並び替えれば できることなので二つの変数をだけで提示しました。 For i% = 1 To n% - 1 For j% = 2 To n% If Lyr$(i%, 1) < Lyr$(j%, 1) Then For k% = 1 To 4 dumy$(k%) = Lyr$(i%, k%) Lyr$(i%, k%) = Lyr$(j%, k%) Lyr$(j%, k%) = dumy$(k%) Next k% End If Next j% Next i%

noname#215107
noname#215107
回答No.3

文字列の並べ替えとは、 "ABCDEF"を"FEDCBA"にするとかでしょうか。

LHS07
質問者

お礼

ありがとうございます。 A$とB$との並び換えです。 A$のなかでの並び換えではありません。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

ああいかん、Comparatorのスペルを間違えてる。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

VBが備えている標準の文字列比較演算で満足できない場合は、比較関数を自作する必要があります。 比較関数Function Compareator(A$ as strimg,B$ as string) as Integer A$がB$が大きいと判断した時は1を、小さい場合は-1を、同じ場合は0を返すようにしてください。 大小関係を判断する比較関数が作成できたなら、配列をソートするサブルーチンは10行くらいで書けます。 逆にいうと、質問文にあるような「文字列には半角も全角もあって数字もあります。」というだけだと比較関数の仕様を決定することができなくて、ソートさせるのは難しいかと。 まずは、「いかに比較するか」を明らかにしてみては。

LHS07
質問者

お礼

ありがとうございます。 Excelでの 並べ替え と同じでいいのですが

関連するQ&A

  • 文字数を越えた文字列を削除するには?

    いつもお世話になっております。また行き詰ってしまいました。 ご助言頂きたくお願い致します。 A列とB列にデータが入っていて、B列には2つのパターンの文字が入っています。 一つは、前の10文字が必ず半角(英字+9ケタの数字)その後は全角のスペースの後に 全角の文字が並びます。(全角の文字数は不規則) 例1:A123456789 あいうえおかきくけこさしすせそ もう一つは頭からすべて全角文字 例2:あいうえおかきくけこさしすせそたちつてと 問題になっている部分は、このB列に入っているデータを頭から 全角15文字以内、半角なら30文字以内に収める という所です。 例1だと、 A123456789 あいうえおかきくけこさしすせそ →A123456789 あいうえおかきくけ(半角10文字+全角10文字) 例2だと あいうえおかきくけこさしすせそたちつてと →あいうえおかきくけこさしすせそ(全角15文字) 下記のようなマクロを作ってみたのですが2つのパターンに対応する為にはどうすればよいでしょうか? Const col1 As String = "B" Dim idx1 As Long Dim myStr1 As String With ActiveSheet For idx1 = .Cells(65536, col1).End(xlUp).Row To 1 Step -1 myStr1 = Cells(idx1, "B") If .Cells(idx1, "B").Value = "" Then Else Cells(idx1, "B") = Left(myStr1, 15) End If Next idx1 End With 以上、宜しくお願い致します。 環境:windowsXP Excel2003

  • VBScriptである文字列に半角文字が含まれているかどうか調べる方法について

    VBScriptである文字列に半角文字が含まれているかどうか調べる方法について、ネットで調べてソースコードを拾ってきたのですが... IFの条件でなぜ全角、半角が判断できるか分かりません。教えてください。お願いします。 iLen = Len(str1) iLenByte = 0 '--- 文字列のバイト数 For i = 2 To iLen strField = Mid(str1, i, 1) iCode = Asc(strField) If iCode > 0 Then '--- 半角文字 Else '--- 全角文字 End If Next

  • エクセル:文字列のバイト数が欲しい

    セルB1に、  半角スペース、全角2文字、半角スペース、 と入力しました。 このシートの別のセルに、 =Len(B1)と入力すると4と表示され、 =LenB(B1)と入力すると6と表示されますので、 間違いなく「半角スペース・全角2文字・半角スペース」がB1に入っているはずです。 このシートのコードに、 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Address = "$L$1" Then     MsgBox LenB(Cells(1, 2).Value)   End If End Sub と打ちました。 ここでシート上のセルL1に何か入力するとメッセージボックスが出るのですが、 メッセージボックスに出る値は8です。 何が原因でしょうか。 6が表示されて欲しいのですが(文字列のバイト数が欲しい)、 どのようにコードを書けばよいでしょうか。 実際にB1に入れていた文字は、 1B です。 (半角スペース・全角数字1・全角英字B・半角スペース)

  • 全角半角考慮した文字列分割

    A列           B列         C列 あいうえおかきくけこ  あいうえ      おかきくけこ アイウエオカキクケコ   アイウエオカキクケ  コ あいうえオかきくけこ   あいうえオ    かきくけこ A列に全角半角混在のテキスト項目があります。 B列、C列に以下のルールで分割したいのですが、Excel関数で 実現可能でしょうか?可能な場合は式をご教授して 頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように 全角半角を考慮して分割したいと考えております。 B列  A列9桁目が半角の場合は半角9文字 A列9桁目全角の場合は半角8文字(全角4文字)をB列へ C列  A列10桁目が半角の場合は、左端10桁目~半角9文字 A列10桁目が全角の場合は、左端9桁目~半角9文字

  • 文字列かどうかの判定

    例えばA1セルに入力せれているものが、数字(もしくは文字)であった場合プログラムを実行させようと考えています。 入力されている数字や文字列は一定では有りません。 If 数字(文字)であった場合 Then Call *** end If の様な感じです。 過去ログの文字列検索を探しましたが、使った事の無いコードばかりでアレンジのやり方が全く分かりません。 数字の場合と文字列の場合の2通りの方法をご教示頂きたくよろしくお願い致します。

  • VBA 文字に半角が含まれているか確認する方法

    VBAで文字に半角が含まれているか調べる方法を教えて頂けないでしょうか?全角が含まれているかのチェックはできたのですが。。。 下記は全角が含まれているかのチェックです。 If Asc(Mid(文字列, i, 1)) < 0 Or Asc(Mid(文字列, i, 1)) > 256 Then   処理 End If

  • 目的の文字列を取得するには?

    ×××× 2011年10月6日 ×××××× というような文字列から日付の部分を取り出そうとしています。 if (mb_ereg("([0-9]{4})年([0-9]{2,})月([0-9]{2,})日",$string,$result)){ echo $result; } という方法で取得しようとしているのですが、失敗します。 半角数字と全角の漢字が混在しているような文字列から、目的の部分を取得する にはどうすればいいでしょうか?

    • ベストアンサー
    • PHP
  • エクセルシートの文字列加工について

    エクセルのシートのA列に"全角ひらがな漢字"の文字列と"半角英数"の文字列を含むセルが縦に並んでいます。約200行。 ■この中から、"全角ひらがな漢字"の文字列を右となりのB列に、"半角英数"の文字列をさらに右となりのC列に、それぞれコピーしたいのですが、関数・マクロなどでいい方法がありましたら教えて下さい。 ■それから、半角英数文字列のC列から、""で囲まれた文字列のみをさらにD列にコピーしたいのです。 文字列の長さが統一されていれば、比較的簡単なのですが、今回は文字列の長さが不規則です。よろしくお願いします。

  • Excel VBAで、特定半角文字のみ全角文字に変換したい。

    Excel VBA で、 A列に半角、全角が混在した文字列及び数字が入っています。 ファイル名に出来ない半角文字 \ / : * ? " < > | だけを全角文字にするには、 どのようなコードを書けば良いのか、宜しくお願いします。

  • 正規表現:囲われた文字列の置換

    シングルクオーテーションで囲われた文字列のシングルクオーテーションの前に文字を追加するように、正規表現を用いて置換しようと考えています。 全角文字は[^\x01-\x7E]で検索できるのはわかったのですが、シングルクオーテーションで囲われて、全角文字を含む場合という表現ができません。 下記のような、文字列を対象としています。置換をするのは、全角文字を含む文字列のみです。  全角文字のみ  半角文字のみ  全角半角文字両方 下記ののように置換したいです。 置換前: '全角文字や半角文字','testです','test'.'テスト'.'てすとtest','123' 置換後: A'全角文字や半角文字',A'testです','test'.A'テスト'.A'てすとtest','123' よろしくお願いします。

専門家に質問してみよう