Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2062 / 13645 ツリー ←次へ | 前へ→

【70192】データがないのにあると判定されてしまう ごん 11/10/19(水) 7:40 質問[未読]
【70199】Re:データがないのにあると判定されてしまう Jaka 11/10/19(水) 11:48 発言[未読]
【70207】Re:データがないのにあると判定されてしまう UO3 11/10/19(水) 17:57 発言[未読]
【70258】Re:データがないのにあると判定されてしまう ごん 11/10/24(月) 14:35 お礼[未読]
【70223】Re:データがないのにあると判定されてしまう UO3 11/10/20(木) 14:31 回答[未読]
【70260】Re:データがないのにあると判定されてしまう ごん 11/10/24(月) 16:26 お礼[未読]

【70192】データがないのにあると判定されてしまう
質問  ごん  - 11/10/19(水) 7:40 -

引用なし
パスワード
   いつもお世話になります

教えていただいた下記のコードを今後活用していこうと思っていました。

データが記述されている一番右側のセルの隣に作業列を設け、そこに処理に必要なデータを入力するというというものです。

しかしながら、見た目は何もデータがないのに、あると判定してしまいます。

キーボードのEndキーと矢印キーで確認しても、何もないという状態ですが、マクロの.UsedRangeは何かがあると判定してしまうようです。

このコードでは、避けることができない現象であれば、作動時間がかかってもよいので、手動のEnd+矢印の動きをマクロにできないでしょうか?


 With ActiveSheet.UsedRange
    Set lCell = .Cells(.Cells.Count).Offset(, 1)
  End With
  
  Set myA = Range("A3", lCell)
  
  With myA.Columns(myA.Columns.Count)
    .Formula = "=LEN(B3)"
    .Value = .Value
  End With

【70199】Re:データがないのにあると判定されてし...
発言  Jaka  - 11/10/19(水) 11:48 -

引用なし
パスワード
   ▼ごん さん:
>データがないのにあると判定されてしまう
原因、数式が入っている。
長さ0の文字が入っている。

>  With myA.Columns(myA.Columns.Count)
>    .Formula = "=LEN(B3)"
>    .Value = .Value
>  End With
これじゃー、空白にはならないですね。
せめて、
"=if(B3="""","""",LEN(B3)"
ぐらいにしないと。

【70207】Re:データがないのにあると判定されてし...
発言  UO3  - 11/10/19(水) 17:57 -

引用なし
パスワード
   ▼ごん さん:

こんばんは

「UsedRangeのまぎれ」ですね。
通常は、作業域として使用したあとクリアするとUsedRangeの対象域からははずれるのですが
フィルター関係等の処理をすると、「かって使っていた場所」もUsedRangeとみなされる場合があります。
上書き保存すれば解消されるんですが。

どんどん作業列が右にずれていく現象でしょうね。
ただ、作業列が右にずれようと、処理結果に影響はないと思ってるのですが?
ですので、UsedRangeで領域の把握を行うコードを提案しました。
これでは処理上、具合が悪いということでしょうか?

一般には、列の最大値は、特定の行(タイトル行等)の最大列を取得しますし
また行の最大値は、特定の列(ラベル列等)の最大行を取得するのですが
ごんさんから提示された要件だけからは、そのような行あるいは列があるのかどうかが
わからなかったので。
A3から「どこかまで」の領域には空白セルが不規則に存在するわけですよね。
どこかに、領域の最終行まで、値がちゃんとはいっている列や、領域の最終列まで値がちゃんとある行があれば
教えてください。

それがなく、かつ、離れた作業列が気になるということなら
「作動時間がかかってもよいので」ということですから、それなりに対処もできますが。

【70223】Re:データがないのにあると判定されてし...
回答  UO3  - 11/10/20(木) 14:31 -

引用なし
パスワード
   ▼ごん さん:

「少々時間がかかっても」というコード例です。

  Set lCell = .Cells(.Cells.Count).Offset(, 1) 

これにかえて

  Dim i As Long
  Dim z As Long
  Dim mcol As Long
  Dim lCell As Range
  
  With ActiveSheet.UsedRange
    z = .Rows.Count + .Row - 1
  End With
  
  For i = 3 To z
    mcol = WorksheetFunction.Max(mcol, Cells(i, Columns.Count).End(xlToLeft).Column + 1)
  Next
  
  Set lCell = Cells(z, mcol)

こんなコードで、ご希望の lCell が取得できます。

【70258】Re:データがないのにあると判定されてし...
お礼  ごん  - 11/10/24(月) 14:35 -

引用なし
パスワード
   ▼UO3 さん:
回答ありがとうございます。

しばらく見れなかったので、お礼おそくなりました。

今回の質問は、これまで一連の質問とは関係なく、教えていただいたコードを
今後色々と活用しようとしたところ、質問のような問題が起こるため、新規にまた
お尋ねしました。

【70260】Re:データがないのにあると判定されてし...
お礼  ごん  - 11/10/24(月) 16:26 -

引用なし
パスワード
   ▼UO3 さん:
回答ありがとうございます。

こちらのコードの方が期待通りに動くことが確認できました。

2062 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free