重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

下記例のように半角6文字の文字列が並んでいます。
先頭に”0”が存在する場合のみ”0”が連続する分だけ”0”を削除したいです。
”0”が後ろの方にあっても途中で”0”以外の文字が入れば後ろの”0”は残したいです。
”0”がなければ、そのままにしたいです。
出来れば関数で処理したいですが、マクロでも構いません。
  02UB0T → 2UB0T
  003Y07 → 3Y07
  000H00 → H00
  000020 → 20
  AS143K → AS143K
宜しくお願いします。

A 回答 (2件)

単純な配列数式を使って


=IF(LEFT(A1)<>"0",A1,MID(A1,MIN(IF(MID(A1,ROW($A$1:$A$6),1)<>"0",ROW($A$1:$A$6))),6))
と記入、必ずコントロールキーとシフトキーを押しながらEnterで入力。





#簡単なマクロを使った方がシンプルというかスマートです

手順:
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

public function notZero(byval Target as variant) as variant
 dim i as long
 for i = 1 to len(target)
  if mid(target, i, 1) <> "0" then exit for
 next i
 notzero = mid(target, i, len(target))
end function

ファイルメニューから終了してエクセルに戻る
=notZero(A1)
のように、関数として使用する。



#補足
特にメリットはありませんけど
=notzero("002345")
のように使用しても構いません
    • good
    • 0
この回答へのお礼

素晴らしいです!
関数でもできるんですね。
ありがとうございます。

お礼日時:2013/06/26 23:38

こんばんは!


VBAになってしまいますが、一例です。

データはA1セルからあり、B列に表示するとします。

Sub Sample1()
Dim i As Long, k As Long, str As String
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For k = 1 To Len(Cells(i, 1))
str = StrConv(Mid(Cells(i, 1), k, 1), vbNarrow)
If str <> "0" Then
Exit For
End If
Next k
Cells(i, 2) = Mid(Cells(i, 1), k, Len(Cells(i, 1)))
Next i
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

感激です!
ありがとうございました。

お礼日時:2013/06/26 23:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!