• ベストアンサー

エクセル初心者で困っています(2回目の質問です)

・部品をバーコードリーダーで読み取り、在庫管理に使いたいのですが読み込んだ値がまちまちで、後処理に困っています。読み取り値を統一させたいのですが、書式が分かりません。教えて下さい。以下が例です。 〔統一したい形〕  126K 12345C00  上記の様に数字3桁、英大文字1桁、半角スペース1桁、数字5桁、英大文字1桁、数字2桁で読み込ましたいのです。部品によっては最後の"C00"等が付いてない物もあります。  又、数字部で桁が足りないところは"0"表記させたいのです。以下に読み込んで表記させたい例を書きます。 〔表記させたい形〕 005K 00012R00 005K 00011 126K 12486 123E 52114S00   よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

書式では無理でしょうからVBA書いてみました。 ・英字が1または2文字含まれること。 ・数英数、または数英数英数であること。 ・数字、英字の最大桁数を越えていないこと。 以上は守られていることを前提。 列Aに元の値があるとして、編集結果が列Bとします。 列Bは事前に書式を「文字列」に設定ください。 必ず結果を目視して、OKなら結果を「コピー」&「形式を選択して貼り付け-値」とすれば良いでしょう。 コードは、以下の手順で貼り付けてください。 1.ツール>マクロ>VisualBasicEditorを開く。 2.左上の「プロジェクト」内で右クリックし、挿入>標準モジュールをクリック。 3.カーソルが右上ウィンドウに移動するので、以下のコードをコピー&ペーストする。(FunctionからEnd Functionまで) Function fncコード変換(str入力 As String) As String Dim n英字1文字目 As Long Dim n英字2文字目 As Long Dim n文字位置 As Long Dim str編集用文字列(6) As String For n文字位置 = 1 To Len(str入力) Debug.Print str入力, Len(str入力), n文字位置, Mid(str入力, n文字位置, 1), Asc(Mid(str入力, n文字位置, 1)) Select Case Asc(Mid(str入力, n文字位置, 1)) Case Asc("A") To Asc("Z"), Asc("a") To Asc("z") If n英字1文字目 = 0 Then n英字1文字目 = n文字位置 ElseIf n英字2文字目 = 0 Then n英字2文字目 = n文字位置 Else fncコード変換 = "書式例外エラー" End If End Select Next n文字位置 str編集用文字列(1) = Format(Mid(str入力, 1, n英字1文字目 - 1), "000") str編集用文字列(2) = StrConv(Mid(str入力, n英字1文字目, 1), vbUpperCase) str編集用文字列(3) = " " If n英字2文字目 = 0 Then str編集用文字列(4) = Format(Mid(str入力, n英字1文字目 + 1, Len(str入力)), "00000") str編集用文字列(5) = "" str編集用文字列(6) = "" Else str編集用文字列(4) = Format(Mid(str入力, n英字1文字目 + 1, n英字2文字目 - n英字1文字目 - 1), "00000") str編集用文字列(5) = StrConv(Mid(str入力, n英字2文字目, 1), vbUpperCase) str編集用文字列(6) = Format(Mid(str入力, n英字2文字目 + 1, Len(str入力)), "00") End If fncコード変換 = Join(str編集用文字列(), "") End Function 4.保存する。 5.シートへ戻り、入力セルがA1なら、セルB1に式設定。 =fncコード変換(B1) 6.必要に応じて下方向にコピー。(セルB1の右下にある■をダブルクリックでOK) お試しください。

その他の回答 (3)

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.4

No.3への補足です。 (19)B2~AU2を、他の行に必要な数だけコピーしてください。

  • shkwta
  • ベストアンサー率52% (966/1825)
回答No.3

ご所望のものをワークシート関数で実現する方法を書きます。 (1)C1~N1に、1から12までの番号を入れてください。 (2)Q1~AB1、AE1~AP1にも同様に1から12の番号を入れてください。 (3)A2から下に、元のデータを順次入力しておきます。 (4)B2につぎの式を入れます。これは小文字を大文字に統一するためです。 =UPPER(A2) (5)C2につぎの式を入れます。これは、どこまで数字があるかを調べるためです。 =IF(B2=0,0,IF(ISERR(VALUE(LEFT(TRIM($B2),C$1))),0,C$1)) (6)C2の式を、C2~N2にコピーします。 (7)O2に次の式を入れます。 =MAX(C2:N2) (8)P2につぎの式を入れます。 =TRIM(MID(B2,O2+2,999)) (9)Q2につぎの式を入れます。 =IF(P2=0,0,IF(ISERR(VALUE(LEFT(TRIM($P2),Q$1))),0,Q$1)) (10)Q2の式を、R2~AB2にコピーします。 (11)O2~P2の式を、AC2~AD2にコピーします。 (12)AE2につぎの式を入れます。 =IF(AD2=0,0,IF(ISERR(VALUE(LEFT(TRIM($AD2),AE$1))),0,AE$1)) (13)AE2の式を、AF1~AP2にコピーします。 (14)AC2の式を、AQ2にコピーします。 (15)AR2に、つぎの式を入れます。 =TEXT(LEFT(B2,O2),"000")&MID(B2,O2+1,1) (16)AS2に、つぎの式を入れます。 =TEXT(LEFT(P2,AC2),"00000") (17)AT2に、つぎの式を入れます。 =IF(AQ2=0,"",MID(P2,AC2+1,1)&TEXT(AD2,"00")) (18)AU2に、つぎの式を入れます。これが結果となります。 =AR2&" "&AS2&AT2

yazaemon
質問者

お礼

・31日の棚卸結果で早速試させて頂きました。式のコピーを間違えて最初はうまく出来ませんでしたが何とか結果を出せました。ありがとうございました。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

実際に読み込んだデータはどのようになっているのですか?

yazaemon
質問者

補足

5e123 2k23511 23k 1567 03c1256r00 126H 87321 上記のようにまちまちです。

関連するQ&A