• ベストアンサー

"0"だけを空白で返すには?

Excel2000を使用しています。VBAである文字列データ(数値)を必要な長さに分割してシートの1行目から順にセルに貼り付けています。 例)要素数が20個ならA1セルからA20セルまでに その際数値が”0”の時は空白に置換して貼り付けているのですが、「10.3」や「50.6」などの”0”までなくなってしまい、セルに貼り付けた際「1.3」や「5.6」になってしまいます。 純粋に”0”だけ空白に(置換)してセルに貼り付けるにはどうすればいいのでしょうか?教えてください。

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

  • ベストアンサー
  • slot7
  • ベストアンサー率21% (18/83)
回答No.5

セルに貼り付ける前に、if文で貼り付ける文字列を数字に変換して、0だったら""を貼り付けるようにすればいいと思います。 例 moji="001" if val(moji)=0 then Range("A1")="" else Range("A1")=moji end if

okkouta
質問者

お礼

ANo.1 の補足の’0を空白に置換以下のプログラムをどうしたらいいのでしょう・・・

okkouta
質問者

補足

すみません。質問者です。自分の失敗マクロ部分を上記を参考に手直ししたら見事に解決しました。(それもあっさりと!) ありがとうございました。

その他の回答 (5)

  • slot7
  • ベストアンサー率21% (18/83)
回答No.6

1 With ThisWorkbook.Sheet1 2 '.Cells(行数,列数) 3 For intj = 1 To intLen 4 '1行目1列(B1セル)から18行目1列(B18セル)へデータ設定 5 .Cells(intj, 2) = Val(strData(intj)) / 10 6 '"0"を"空白"に置換 7 .Cells(intj, 2).Replace What:="0", _ 8 Replacement:="", _ 9 MatchCase:=True, _ 10 MatchByte:=True 11 Next intj 12 End With で、5から10行目のところを if Val(strData(intj)) = 0 then .Cells(intj, 2) ="" else .Cells(intj, 2) = Val(strData(intj)) / 10 end if に置き換えれば良いと思います。 Val(strData(intj))が0だったら""、0以外だったら10で割った値をいれる。 (7~10行目でセルに入力された文字中の0を""にしている処理だと思われます。)

okkouta
質問者

お礼

ANO.5の方のお礼にも書いたのですが、’0を空白に置換以下を If Val(.Cells(intj, 2)) = "0" Then .Cells(intj, 2) = "" に書き換えただけでうまくいきました。 補足を記入してすぐに回答くださって感謝しています。ありがとうございました。

okkouta
質問者

補足

あっANo.5の方とANo.6の方は同一人物でしたね。本当にありがとうございました。感謝感謝です。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.4

文字変数を用意 初期値は空白にする。 IF文で数値が0以外になったら文字変数を"0"に更新 0をこの文字変数に置換する。

okkouta
質問者

お礼

ANo.1 の補足の’0を空白に置換以下のプログラムをどうしたらいいのでしょう・・・

  • ThunderV2
  • ベストアンサー率58% (119/205)
回答No.3

こんにちは。 VBAは詳しくないので、申し訳ないんですけど、 別のやり方ですが・・・ 「ツール」-「オプション」-表示タブのゼロ値のチェックを外す を実行すると、ゼロは空白で表示されるようになります。

okkouta
質問者

お礼

シート(ブック)全体ではなく、範囲は指定できるのでしょうか? できるなら有効打になるような気がするんですが・・・

  • GRIGO
  • ベストアンサー率15% (9/57)
回答No.2

ファイルIO面倒だったので… tmpNum をインプットと解釈して、現状のマクロに組み込んでください。 Private Sub iikagen_na_prg() Const tmpNum As String = "001000.1" Dim cngNum As String Dim intI As Integer '左側の0を除去 For intI = 1 To Len(tmpNum) If Mid(tmpNum, intI, 1) <> "0" Then cngNum = Mid(tmpNum, intI) Exit For End If Next intI '右側の0を除去 For intI = 1 To Len(cngNum) If Mid(cngNum, Len(cngNum) - intI + 1, 1) <> "0" And _ Mid(cngNum, Len(cngNum) - intI + 1, 1) <> "." Then cngNum = Mid(cngNum, 1, Len(cngNum) - intI + 1) Exit For ElseIf Mid(cngNum, Len(cngNum) - intI + 1, 1) = "." Then cngNum = Mid(cngNum, 1, Len(cngNum) - intI) Exit For End If Next intI '結果確認用 MsgBox cngNum End Sub

okkouta
質問者

お礼

前回の質問に回答いただきありがとうございました。(良回答) 上記マクロ試しました。intIをintKに変えて(コンパイルエラーが出たので)実行したところ、メッセージBOXが出て「1000.1」(OK)とあり、OKをクリックしても閉じず、強制終了しなくてはいけなくなります。 またマクロの '結果確認用 MsgBox cngNum の部分を削除して実行したところ、"0"を貼り付けてしまいます。 ちなみに私の失敗マクロはNo.1さんの補足に記載いたしました。

  • lasichi
  • ベストアンサー率31% (122/389)
回答No.1

ちょっとこの質問だけでは何をやろうとしているのか分からないですが・・ 「文字列データ(数値)を必要な長さに分割して」の 分割した値が0だったら空白にするようにしては? どうも1文字ずつ0だったら空白に置換しているようですので。 また、「数値が”0”の時は空白に置換して」の部分を どうやっているか? を書いてもらえると分かるかと思います。

okkouta
質問者

補足

'開いたファイルの18行目に文字列があれば処理 If .Cells(18, 1) <> "" Then '読み込んだファイルの文字数が6の倍数かチェック intLen = Int(Len(.Cells(18, 1)) / 6) If Len(.Cells(18, 1)) = intLen * 6 Then For intI = 1 To intLen '6バイトづつ抽出 strData(intI) = Mid(.Cells(18, 1), 6 * intI - 5, 6) Next intI Else '読み込みファイルエラー(6文字づつになっていない。) MsgBox "読み込みファイルエラー(データ長不正)" Exit Sub End If Else '読み込みファイルエラー(文字列がない) MsgBox "読み込みファイルエラー(入力なし)" End If End With '貼り付けたいシート(=Sheet1)への処理 With ThisWorkbook.Sheet1 '.Cells(行数,列数) For intj = 1 To intLen '1行目1列(B1セル)から18行目1列(B18セル)へデータ設定 .Cells(intj, 2) = Val(strData(intj)) / 10 '"0"を"空白"に置換 .Cells(intj, 2).Replace What:="0", _ Replacement:="", _ MatchCase:=True, _ MatchByte:=True Next intj End With End If です。

関連するQ&A

  • Excel 空白セルのコピペについて

    http://imgur.com/5e8TsP1 上記図のように、シート1のB列に各文字を入力しています。 そして、A列にはもしB列に文字が入力されていたらID代わりの数値を表示する、という式を入力してあります。 次に、シート1のA列、B列をコピーして、シート2に数値としてペーストをします。 すると、A列は空白のはずが、xldown操作をすると元のセルで式が入力されていたものまで選んでしまい、真の空白セルとして認識してくれません。 そこで、このような例の場合、どうコピーペースト、または選択をすれば偽物の空白 セルを生み出さないように出来るでしょうか? 実際に使用するデータは項目名が多く存在し、マクロですべてのセルを選択→新規ブックを作成してそこにペースト、という処理を行っています。 この時に偽物の空白セルが出ると、データベースに読みこむ際に不都合が生じますので、何とか改善を図りたいです。 VBA、関数、Excel上のテクニックのいずれでも構いませんので、どうかご教授下さい。 よろしくお願いいたします。

  • EXCEL2010 VBAで空白行以外をコピー

    EXCEL2010を使用しています。 シートAではセルA1からA10に順にデータを入力していきます。 A1からA10のすべてにデータを入力する場合やA1からA4のみデータを入力する場合等があります。 このA1からA10のデータをシートBのA1からJ1にコピーしたいと思っています。 空白以外のデータをコピーして、コピー後はシートBのA1:J10で空白の列は削除したいと 思っています。 (例) シートA A1 ○ A2 ○ A3 × A4以降すべて空白 シートB A1 ○ B1 ○ C1 × D1からJ1までは列ごと削除 これをVBAで作成したいのですがどなたか詳しい方押してください。

  • EXCELで式での空白セルの挿入方法

    A列は空白行で、B列は数値が入っていたり空白だったりする行で構成されています。 またC列からD列までの全ての行には数値が入っています。 この時A列に条件付き数式を入力して、B列が空白でなければB列に空白セルを挿入して現B列からD列を右にシフトさせたいのですが、数式で可能でしょうか? 数式で可能ならばA列に入力する式を、不可能なら参考のためVBAでの記述をお教え頂けると嬉しいです。(VBAはあまり理解しておりませんが。) 例 【処理前】 A列 B列 C列 D列 E列     22   33  44          55  66     77   88  99         100  101 【処理後】 A列 B列 C列 D列 E列 式       22  33  44 式       55  66 式       77  88  99 式      100  101 2万行の処理を1回のみしたいです。 宜しくお願いします。

  • エクセルで文字最終行の空白セルへ移動

    エクセル2000です。 1000行内で間にとびとび(順不同)に空白セル、他は文字有りです。 (1000行目は文字あり) シートが10個あり、各シートともばらばら(ウィンドー枠固定位置)ですが、ウィンドー枠固定内の行に「最終行へ移動」のボタンを設け、いずれの行からも、最終文字入力の次の行空白セル(AからZ列のいずれか)へ移動したいです。 方法がありますでしょうか? VBAの場合、素人につきVBAへの入力方法等も一緒にお願いします。またVBAの場合、ソフトを立ち上げたら直ぐに実行できるようにしたいです。(立ち上がり時のマクロ警告はあり) よろしくお願いいたします。

  • Excelで空白行を削除したい

    2500行位使用しているシートのなかに、どのセルも空白になっている不要な行が300行くらい混ざっています。 この行を自動的に削除するにはどうすれば良いでしょうか。 ただ、その行のA~Eセルは空白でもFセルに値が入っているなど完全に空白でない行は削除できません。 メニュー、関数、VBAなど有れば教えてください。

  • エクセルで空白行を挿入するには

    一つの列に200ほどデータがあるとします。 そこで1行おきに空白行を挿入していきたいのですが手でいちいち空白行を挿入していてはらちがあきません。 関数等も含めて、なにか良い方法はないでしょうか。 例 セルA1   セルA2   セルA3 以下続く    ↓   セルA1   空白行(セル)   セルA2   空白行(セル)   セルA3   空白行(セル) 以下続く   といった具合です。

  • Excel2003で、指定列に空白セルのある行の数をカウントしたいので

    Excel2003で、指定列に空白セルのある行の数をカウントしたいのですが。 下記の様なセルがあり、A列とC列が共に空白の行の数をカウントしたいのですが どの様にすれば良いでしょうか? (3行目と6行目がA列とC列のセルが空白なので、「2」を表示したいのです)  ABC 1あか 2い さ 3 き 4う 5え し 6 く 7 けす 宜しくお願い致します。

  • MIN関数で空白セルを無視したいのですが

    Excel2010です。 新たなデータを入力する度に数式を訂正しなくても良いように年間のデータ記入表を作成してあります。 今日現在での最高値と最低値を常に表示されるようにしたいのですが、最低値が0となってしまいます。数値以外のデータは無視されるハズなのに空白セルまでも対象範囲としているため 0 となると思い、 =MIN(A1:A365,"<>0") としてみたのですがエラーでした。 対象範囲のセルを数値以外の文字列とかにしておけば・・・とも思ったのですが、入力したデータが数値と認識されないのではこれまた困ります。 空白セルは文字列でそこにデータ(数値以外は入らない列) が入力されたら数値に変換されるとかの関数は・・?と調べてみたのですが、自分のレベルでは限界でした。 なにか方法があればご教示ください。 (実際には複数のシートを参照して得られたデータをさらに細分化した形式で、列はすでに60ほどあり他のシートで絶対参照としているものが多く、行以外の加減は難しい実情があります)

  • Excel VLOOKUPで複数の関数

    どなたかわかる方教えて下さい!! わかりにくい説明かと思いますが、よろしくお願い致します。 Aシートにコードが入力されています。 Bシートにコード、文字列、数値が入力されています。 AシートのコードでVLOOKUPを使い、Bシートから数値を呼ぶことはできるのですが、 数値が空白の場合は、空白にする。B列の文字も検索したい場合はどのようにすればよろしいでしょうか? 例 Aシートには、コード001が入っています。 Bシートから、コード001、「あ」の行を検索し、数値をもってきて、空白の場合は空白にしたいです。     A列   B列   C列   D列 1行  001   あ   10   空白 2行  001   い   20   30 3行  002   あ   30   空白

  • セルが空白だったらExitSub

    いつもお世話になっております。 問う方Excel97でシートAのD列のデータを シートBに自動コピーさせるVBAを思考中。 D列のデータが無くなったらLoopを止めるように 条件をつけたいのですが、どう書いたものか困っております。 ちなみに、セルの指定もコピーを書きこんだら次の行を見に行かせる為に、引数?を使用しています。 どなたか、教えて下さい。 宜しくお願い致します。