- 締切済み
excel2003
下記記述について。 現在、固定長ファイルから取り出す文字数を指定し、「2G」シートの「Eセル~」に出力しています。 Sub Sample() vLeng = Array(5, 4, 6, 12, 12, 8, 23, 19, 1, 1, 6, 3, 13, 1, 12, 10, 1, 7, 20, 1, 3, _ 30, 25, 25, 2, 7, 1, 8, 3, 1, 0, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, _ 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, _ 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, _ 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 6, 12, 8, 0, 100, 30, 1, 1, 10, _ 10, 23, 1, 20, 8, 100, 100, 30, 25, 23, 20) '←取り出す文字数 For i = 1 To Sheets("貼付").Range("A" & Rows.Count).End(xlUp).Row sString = Sheets("貼付").Range("A" & i).Text sString = Replace(Replace(sString, " ", "*"), " ", "×") nPos = 1 For j = 0 To UBound(vLeng) Sheets("2G").Cells(j + 1, i + 4) = Mid(sString, nPos, vLeng(j)) nPos = nPos + vLeng(j) Next j Next i End Sub ---------------------- うっかりしてたんですが、固定長ファイルの内容は全角・半角とあり、 全角の場合は1文字2バイト、半角の場合は1文字1バイトとして カウントしていきたいのですが、可能でしょうか? 列ごとの条件は一緒です。 (例) E1・・・半角 F1・・・半角 E2・・・全角 F2・・・全角 E3・・・全角 F3・・・全角 E4・・・半角 F4・・・半角 E5・・・全角 F5・・・全角 ご回答宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- mt2008
- ベストアンサー率52% (885/1701)
そこは条件付き書式でやっては? 例えば、貼り付ける「2G」シートのA列に貼り付け例サンプルの様な物を入力しておき、E列以降は入力規則でそのサンプルと以下の比較を行い、どれか一つでもTRUEなら違いがあると判断してセル色を変えます ・サンプルが数値か否かの結果と、セルの値が数値か否かの結果が異なる ・サンプルの文字数とセルの値の文字数が異なる ・サンプル文字のバイト数とセルの文字のバイト数が異なる 条件付き書式の式はこんな感じ =AND(E1<>"",OR(E1="",ISNUMBER($A1)<>ISNUMBER(E1),LEN($A1)<>LEN(E1),LENB($A1)<>LENB(E1)))
- mt2008
- ベストアンサー率52% (885/1701)
固定長文字列から文字を取り出す時に、文字数ではなく、バイト数で取り出したいって事でしょうか? 例:固定長文字列:12345あいうえ…… 取り出すバイト数:5、4、…… の時、「12345」「あい」…… と、取り出す その場合、以下のように取り出したいバイト数と文字数が合わない様な場合はどうするのでしょう。そのようなパターンは絶対無いという前提で良いのでしょうか 固定長文字列:1234あいうえ…… 取り出すバイト数:5、4、…… 私の考えすぎで、ただ単に取り出した文字列のバイト数をどこかに表示したいのでしたらLENB関数で表示してください。
補足
説明不足で申し訳ありません。 固定長ファイル内に桁数・属性が定められているんですが、 まれに半角項目に全角が入っていたり、その逆もあったりで、 業務に支障をきたしています。 桁数もかなり長いので、目で追って行くのは非常に困難で 時間がかかります・・・ なので、「どの部分で桁ずれ?を起こしているのか」を早期で発見できればと思い作成しようとおもったのですが、やはり難しいでしょうか? 再度、ご回答の程宜しくお願い致します。