• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:全角・半角混在の文字列から半角文字のみ取り出す)

全角・半角混在の文字列から半角文字のみ取り出す

Chiquilinの回答

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.4

> 例えば製品名に“MG05KRカラーマグネットお徳用”というように > “お徳用”という文字が各々に入っていた場合は目的が果たせません。 何の問題もないはずですが…… =MID(A2,IF(LENB(LEFT(A2))=1,1,LENB(A2)-LEN(A2)+1),LEN(A2)*2-LENB(A2)) でも同じです。 「お徳用MG05KRカラーマグネット」なら別ですが その場合は元の式 でもダメなはずですね? > ようやく半分ぐらいまで進んだのですがこの本ダメなのかな?? その式を見る限りでも 突っ込みどころがいくつかあります。 まず何故「COLUMN(2:2)」なんて馬鹿な指定の仕方をしたのか合理的 な理由がありません。 Excel2003以前なら「COLUMN(2:2)」は「1~256」 くらいで ちょうど良かったかもしれませんが。「ROW(A$1:A$99」な どとした方が よほど分かりやすいはずです。 次に「*1」が入っていますが これは飾り以上の何の意味もありません。 この部分だけを見ても この数式を書いた人が意味をほぼ理解せずに使っ ていることが読みとれます。 INDEXを入れているのも Enter確定にしたいだけの理由です。きっぱり 無駄です。 この数式を見る限り 10年近く前の質問掲示板で流行った方法を そのま まもってきたという印象ですね。多分理解もせずに。

mr_green
質問者

お礼

Chiquilin 様 再び、ご回答ありがとうございます。 お礼が遅くなりお詫び申し上げます。 こちらの説明不足で申し訳ございません。お察しの通り “MG05KRカラーマグネットお徳用”の各々というのは文字の前後にという意味です。 “MG05KRカラーマグネットお徳用”でも”お徳用MG05KRカラーマグネット”でも =MID(A2,MATCH(1,INDEX(LENB(MID(A2,COLUMN(2:2),1))*1,0),),LEN(A2)*2-LENB(A2)) なら両方半角文字を抽出してくれます。 前後どちらに来ても配列内の半角文字位置を探すからだとこちらで理解しています。 「COLUMN(2:2)」につきましてはご指摘の通りムダですね。当初数式の検証で確認した際にも今思えば、 この範囲の数字の羅列が次から次にあり余計に何のこっちゃ?となりました。ほかの方も仰って頂いている 通り適度な文字数でという事ですね。 記述頂いている通りROW(A$1:A$99) 単に配列カウントが欲しいだけならCOLUMNをあえて使う必要もないのですね。 すいません。ご丁寧にありがとうございました。

関連するQ&A

  • 全角文字と半角文字を判別して文字列を追加

    全角文字と半角文字が混合している文字列に文字を追加するプログラムを考えています。 仕様としては全角から半角に変わる際には全角文字の後ろに1234を、 半角から全角に変わるときは半角文字の後ろに4321をつけるというものです。 例1 文字列が「あxxxお」ならば出力結果は「あ1234xxx4321お」 そこで質問なのですが 文字列から全角文字と半角文字をプログラム上で判別して 上記のように出力するにはどうしたらいいんでしょうか? ヒント等ございましたらどうぞお願いします。 とりあえず作ってみた例1の結果を無理やり出力するプログラムのコードを載せておきます。 こちらをうまく改変してくださっても結構ですのでよろしくお願いいたします。 #include <stdio.h> #include <string.h> int main(void){ unsigned char str0[256] = "あxxxお", str1[256] = "1234",str2[256]= "4321"; unsigned int zh,hz, len0 = strlen(str0),len1=strlen(str1),len2=strlen(str2); printf("挿入前:%s\n",&str0); zh=2; //全角から半角に変わる位置 hz=5; //半角から全角に変わる位置 //1234を挿入/// memmove(&str0[zh+len1], &str0[zh], len0 - zh+1); memcpy(&str0[zh], str1, len1); //4321を挿入/// memmove(&str0[hz+len1+len2], &str0[hz+len1], len0); memcpy(&str0[hz+len1], str2, len2); printf("挿入後:%s\n",&str0); return 0; }

  • 半角/全角文字混在データの分割方法

    VB6.0にて、あるデータ項目の内容を、画面上の2つの表示領域に分割して セットする方法を教えて下さい。 あるファイルの項目として、「住所」という項目があるとします。 このデータを取得し、画面に表示する際に、「住所1」「住所2」とに分割して、 セットします。 この場合、ファイル上の「住所」は、キャラクタタイプで40バイトと定義されており、 ”半角/全角文字混在”でデータが格納されています。 画面上の、「住所1」「住所2」はそれぞれ、20バイトとします。 この様な条件で、単純に取得したデータを2分割すると、 取得したデータが、全て半角か全角なら問題はないのですが、 例えば、1文字目が半角で、以降が全て全角文字だった場合に、 最後の全角文字がぴったり収まらなくなり、うまく表示できないように思います。 また、文字を取得する際に、使用している、Mid(MidB)関数やLen(LenB)関数も、 うまく利用できていないようです。(コード体系の違いでしょうか?) どなたかご教授下さい。 よろしくお願いします。

  • 全角半角混在の文字列から○文字まで取得する方法

    はじめまして! MySQLから取得した文字列をPHPで例えば10文字まで表示したいのですが、良いやり方ありますでしょうか? 文字列には全角半角が混在しているので substr関数だと、うまく取得できない場合があります。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 列ごとに全角英数・全角カナ・半角カナしか入力できないフォーマットをつくりたい

    エクセルで基本フォーマットを作り、他の人に配布&入力してもらった後、全てを集計&データベース化する必要があるのですが。 各列に設けた項目により、‘全角英数のみ’‘全角カナのみ’‘半角カナのみ’の入力規則を設けた後、ロックをかけてみたのですが、変換できてしまう…? 全角英数&カナに関しては【=LEN()*2=LENB()】で逃げれたように思うのですが、‘半角カナのみ’の入力設定がわかりません…;; ちなみに、別の列に入力したものを数式で半角に変換する方法は、今回のフォーマットには使いたくないのですが…?? どなたか、お助けください…**

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

    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文字

  • 半角カナならば(Excel)

    Excelで、A1にある文字列の中の各文字を次の条件で変換するためにB1に数式を設定する場合、 (1)半角カナは全角カナに変換 (2)半角カナでない文字はそのまま(何も変換しない) B1に設定する数式は以下のようなものが考えられると思われますが、 =LET(x,MID(A1,SEQUENCE(LEN(A1)),1), CONCAT(IF(・・・, JIS(x), x))) この・・・にくる「半角カナならば」の条件が思い浮かばないのですが、お分かりの方いらっしゃったら教えていただけますか。

  • テキストの貼り付け(全角と半角の混在)。

    お世話になります。 テキストデータをエクセル(2007)にセル別に貼り付けようと思います。 単純にコピーしてエクセルに貼り付け、貼り付け後セル別にMID関数で読み取って使用したら名前(全角)の中に空白があり、後の半角数字データが上手く読み取れません(ずれてしまうのでそのつど空白部分を半角分削除)。 区切りウィザードの利用も考えたのですが、読み取り、貼り付け回数が多いのでいちいち設定してられません。以下のような場合どのようにしたら良いでしょうか(最後の数字(記号)を同じ列のセルに入れたい)。 例 福田康夫 OKを =MID(A1,1,4) だと 福田康夫 吉田  茂 OKを =MID(A2,1,4) だと 吉田   吉田と茂の間は2文字になるので最後のOKがずれてしまう。という感じです。 実際には名前とOKの間には半角の数字が多く並んでいるので、吉田と茂の間にカーソルを持って行き半角分(一文字分)DELすると指定したセルにはまるのですが、、。 何か良い方法があったらご教授ください。

  • 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

  • エクセルの文字列操作

    (1)A列にファイル名(文字数任意)と拡張子(文字数任意)が入力されています。 fileAaa.exl fileBbbbb.exlx fileCc.doc fileDddd.docx (2)↑のデータからMID関数を使ってB列にファイル名 C列に拡張子を表示させたい 質問1. A列の拡張子"."の位置が左から何文字目かを知るための関数名を教えてください。 質問2. MID関数やBVA以外でもっと簡単にできる方法があればおしえてください。

  • 全角半角を意識した文字分割

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