プロが教える店舗&オフィスのセキュリティ対策術

CSVからEXCELに取り込んだデータにおいて

F列が空白でないならばM列に1を入力 というプログラムを組んだところ、
手前のL列の区切り位置が原因で、正しく1と入力されない行がありました。(*)

そこで、”マクロの記録”から、L列に対してタブで区切る記述を盛り込んだところ、
1度目にボタンを押した時には上手くいかず(*の再発)、続けてもう1度同じボタンを押すと
正しく1と入力されます。これが毎回発生します。

原因と解消方法につき、何かご存知の方がいらっしゃいましたら教えていただけないでしょうか。
(自分だけが使用するExcelではないので、2度ボタンを押すことは避けたいです)

お手数ですが、よろしくお願いいたします。

質問者からの補足コメント

  • 質問内容がわかりづらく、また補足が遅くなって、申し訳ございません。
    同じ形式でダミーデータを作成しましたので、添付いたします。

    F列がブランクでないときにM列に1と表示させたいのですが、そのプログラムを実行すると、CSVから取り込んだ元データの形式が邪魔をして、添付のような状態になります。
    すなわち、31行目のくまもんの行で、F列に記入があるのにM列に1と入力されません。
    上手くいった29行目と見比べると、L列の表示形式に違いがあるようなので、手動でL列の区切り位置を変えてからプログラムを実行したところ、M31セルにも1と入りました。
    そこで、M列に1と入力する前にL列の区切り位置を変えるプログラムを追記しました。
    しかし、1度目のプログラム実行では1と入力されず、続けてもう一度同じプログラムを実行すると1と入力されます。これの原因究明と解消をしたいと考えております。

    「EXCEL VBA 区切り位置のプログラ」の補足画像1
      補足日時:2021/02/10 15:36
  • prefSh.Activate
    'L列 区切り位置の変更
    Columns("L:L").Select
    Selection.TextToColumns Destination:=Range("L1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True

      補足日時:2021/02/10 15:47
  • Dim 列 As Long, 行 As Long
    列 = 6 '調査対象セルの列番号
    For 行 = 2 To workEndR '行番号2から最終行まで
    If IsEmpty(Cells(行, 列)) Then '空白セルならスキップ
    行 = 行 + 1
    Else
    Cells(行, 列).Offset(0, 7).Value = "1" '空白セルでないなら右方向に7つ先のセルに1と表示
    End If
    Next '繰り返す(Forへ戻る)

      補足日時:2021/02/10 15:48

A 回答 (4件)

変数workEndRを求めるロジックが見当たらないようですが、どうやって求めてるんですか?


1回目のランでは、正しく求められないが、2回目では正しく求められるようなロジックになってませんかね?
    • good
    • 0
この回答へのお礼

検証作業の時間が確保できず、お礼が遅くなり、大変申し訳ございません。
変数workEndRの部分を見直すことで、解決ができました。
本当にありがとうございました。

お礼日時:2021/02/19 15:59

#1です。


M列セルは、入力されているが、見えないと言う事でしょうかね。
区切り位置でなく、L列、M列の表示形式を変更すると見えるのかな?

例えば、
Range("L:M").NumberFormatLocal = "G/標準"
Range("L:M").HorizontalAlignment = xlRight

あと
Cells(行, 列).Offset(0, 7).Value = "1"  1を文字として扱いたいのなら
="'1"と変えてみてはどうでしょう。

一連のご質問の内容を理解できていませんので、私の限界ですね。
    • good
    • 0

こんばんは



CSVを取り込んだシート上で、プログラムを実行しているものと解釈しましたが、
>区切り位置が原因で、正しく1と入力されない行がありました
という状況が想像できません。
後から、文字区切りを利用して展開したりして上書きされてしまうというような意味でしょうか?

そのようなことをしていなければ、手操作でもプログラムでも「入力した値が正しく入力されない(?)」というようなことは考えられないのですけれど・・・

どのようなデータで、何をすると、どうなるのでしょうか?
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。わかりにくい表記で、混乱を招いて申し訳ございません。補足のところに画像と説明を加えましたので、お手隙で再度ご確認いただけませんでしょうか。ご迷惑をおかけしますが、よろしくお願いいたします。

お礼日時:2021/02/10 15:43

こんばんは、


プロセス、データ内容が分からないので、どのタイミングで実行するのが良いのか、わかりませんが、
* が不要なら、データをReplaceすれば良いように思います。
RangeObject = Replace(RangeObject, "*", "")
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。伝え方が悪く、大変申し訳ございません。
1と入力される代わりに*と入力されるわけではなく、
「手前のL列の区切り位置が原因で、正しく1と入力されない行がある」という事象自体を、後の文章で参照するために、注釈の(*)をつけておりました。

お礼日時:2021/02/10 15:03

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