dポイントプレゼントキャンペーン実施中!

F列に文章が入力されていればM列に”1”の値を入力するという風にしたいのですが、入力有なのにカウントされない行がいくつかあります。理由と解消方法を探しているのですが、自力では難しそうなので、どなたか思い当たることがあれば、教えていただけませんでしょうか。

該当部分

prefSh.Activate
'M1のセルにタイトル記入
Cells(1, 13).Value = "入力あり"
'入力されている場合は"1"を右方向に7つ先のセルに入力
Dim 列 As Long, 行 As Long
列 = 6   '調査対象セルの列番号
For 行 = 2 To workEndR '行番号2から最終行まで
If Cells(行, 列) <> "" Then '空白セルでないなら
Cells(行, 列).Offset(0, 7).Value = "1" 'の右方向に7つ先のセルに1と表示
End If
Next '繰り返す(Forへ戻る)

ちなみに、このカウントされない行たちに別の目的(B列を検索値にしてA列の値を転記)でFindメソッドを使おうとしてもエラーになります。他の行では上手くいきます。A列やB列のデータの型を調べても、検索元と検索先で数値と文字列の不一致などは起きておらず、なぜこのいくつかの行だけ上手くいかないのか、上記の処理ができないことと併せて、2重に悩んでおります。

A 回答 (7件)

>区切り位置を変更したらできました!


良かったです。
前段コード、値に問題があったのでしょうか?
どのような表組みでどんな値だとそうなるのか興味はありますが、
それは、またの機会があればと思います。
区切り位置の操作のVBAコードは、マクロの記録でも記録できると思います
決まった操作であれば、オプションが多いのでデフォルトを削除すれば良いと思います。
また、検索などで調べるのであれば、TextToColumns メソッドなどで調べれば、すぐに導入できると思います。
    • good
    • 0
この回答へのお礼

最後までご丁寧に教えてくださり、ありがとうございます。
アドバイスに従って、やってみます!

オリジナルで開発していただいたシステムから吐き出したCSVを、VBAでEXCELに取り込んだ(シート追加した)ところ、このような一部不具合が生じておりました。
元データがCSVだからかもしれませんね・・

また、質問の「ちなみに〜」以降のところも勉強しながらFindからDictionaryに書き換えている最中で、そちらもまた詰まっているので、別途改めて質問する予定です。もしよろしければ、そちらもよろしくお願いいたします。

お礼日時:2021/02/09 13:06

#5、野暮用で切りましたが、連続で申し訳ないです。


結合セルなんて落ちは無いですよね
結合セルがあるようであれば、
If .Cells(行, 列).MergeArea(1) <> "" Then
かな?
    • good
    • 0
この回答へのお礼

たくさん案を出していただき、ありがとうございます。
こちらのヒントをいただきセルを見直したところ、つながっているように見えるが結合セルではなかったので、(手動で)区切り位置を変更したらできました!
本当に助かりました。(そして、こんな結末で申し訳ありません)

データ>区切り位置の手順も、手動でやらずに済むように、VBAをさらに調べてみます。本当にありがとうございました!

お礼日時:2021/02/08 17:25

#4すみません


逆ですね。すみません
    • good
    • 0

#3です


使用されていないと言う事ですね。
空白とありますが実は改行コードやスペースがあるとかではないでしょうか?
Sub a()
Dim 列 As Long, 行 As Long
列 = 6 '調査対象セルの列番号
With ActiveSheet
For 行 = 2 To .Cells(Rows.Count, 6).End(xlUp).Row
.Cells(行, 列) = Replace(Replace(Replace(.Cells(行, 列).Text, Chr(10), ""), " ", ""), " ", "")
If .Cells(行, 列) <> "" Then '空白セルでないなら
.Cells(行, 列).Offset(0, 7).Value = "1" 'の右方向に7つ先のセルに1と表示
End If
Next '繰り返す(Forへ戻る)
End Sub
有った場合支障があるといけないのでコピーシートで試してください。

ちなみに"1"はExcelで数値にされちゃいそうですが、ご質問とは関係ありませんね。
    • good
    • 0

こんにちは、


コードに問題は、無いように思いますが、
>Findメソッドを使おうとしてもエラー との事なので、
これは、すべて想像(推測)の世界ですが、、可能性を考えました。

先ず、On Error Resume Next を使用していませんでしょうか?
使用していないのなら、以下はすべて意味がありませんので読み飛ばしてください。
使用している場合は、参照元、出力先に保護や入力制限が設定されていないでしょうか?
シートに保護がかかっていて、不具合セルにロックがかかって要るなど・・
この条件なら、空白以外で処理をしようとした時、セルの保護によりエラーが発生して入力されず、次の処理に進み、結果 値があるのに出力されない結果になると思います。。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
今回、On Error Resume Nextは使用しておりませんでしたが、使用すると上記のような事象が起こる可能性があるということを知ることができました。

Findを使うと検索に引っかからない場合があるようなので、配列など他の記載方法を勉強して、試みてみます。

引き続きアドバイスは募集しておりますので、また何か良い方法がありましたら、宜しくお願いいたします。

お礼日時:2021/02/08 15:06

No1です。


空白セルの判定と解釈してしましました。
No1の回答は無視してください。
    • good
    • 0
この回答へのお礼

アイディアを出していただき、ありがとうございました。
(書き方がわかりづらく、申し訳ございません)
また別途思いつくことがありましたら、よろしくお願いいたします。

お礼日時:2021/02/08 14:42

該当セルに半角のスペース又は全角のスペースがあると、空白セルと判定されません。


If Cells(行, 列) <> "" Then を
If Trim(Cells(行, 列).value) <> "" Then
とされてみてはいかがでしょうか。
    • good
    • 0

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