[[20100315172441]] 『最終列の認知方法』(困りました) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『最終列の認知方法』(困りました)

毎回お世話になってます。
『SUMIFマクロにて』というトピックで質問をさせていただきました、困りましたです。

昨日は出来ていたのですが、今日になってどうもできなくなってしまいまして…

昨日、こちらの書き込みを踏まえて、

Sub Macro9()

    Columns("D:D").Select
    Selection.Insert Shift:=xlToRight

    Dim saigo As Long
    saigo = Range("A" & Rows.Count).End(xlUp).Row

    y = 2

    Do While Cells(y, 1).Value <> ""
      Cells(y, 4).Value = _
        "=SUMIF($A$2:$A$" & saigo & ",A" & y & ",$C$2:$C$" & saigo & ")"

      y = y + 1

    Loop
End Sub

といった具合にやって、大丈夫だったのですが、

このマクロを他のファイルに適用すると、
なぜか、D15=SUMIF($A$1:$A$2,A15,$C$1:$C$2)
という感じになり、

行の最後を認知しないようなのです(範囲としたいのは、2〜40000程の行)。

何か原因が分かる方、いらっしゃいますでしょうか…。
たびたび申し訳ございません。

サイズオーバーか何かのエラーで、前トピックに書き込みが出来ませんでしたので、
こちらに質問させていただきます。

よろしくお願いします。

(困りました)


 >といった具合にやって、大丈夫だったのですが、 

 >このマクロを他のファイルに適用すると、
 >なぜか、D15=SUMIF($A$1:$A$2,A15,$C$1:$C$2) という感じになり、 

 『といった具合』とか、『という感じ』とかでは、
 本当にそうなのか、そうでないのか分かりません。

 正確な情報がなければ判断に困ります。

 少なくとも、どの部分が本当で、どの部分がテキトーな情報なのか
 明確にしていただけませんか?

 (半平太) 2010/03/15 17:30


レスの切り替え申し訳ございません。あいまいな表現となったことにも謝罪いたします。

記載している情報は、全てマクロの記載をコピーした正確なものです。

D5= のものは、例のつもりで書いています。

ご迷惑をおかけしておりますが、上記の通りです。

よろしくお願いいたします。

(困りました)


 前回の
[[20100312111537]] 『SUMIFマクロにて』(困りました)
 で、私が回答したコードではEndを使わずにFindメソッドで
  Dim LRow As Long
  With Range("A:A,C:C")
    LRow = .Find("*", .Cells(1), xlFormulas, xlPart, xlByRows, xlPrevious, False, False, False).Row
  End With
 のように最終行を取得していますが参考になりませんでしたか?

 End プロパティは最終行を取得する事もできますが、データの並び方によっては
 上手く出来ない場合も多くあります。(空白があるなどの場合や数式で""にしてる場合など)

 Findメソッドだと簡単にほぼミス無く取得できますので試してみてください。
 数式で""にしている場合で値がある最終行の場合はxlFormulasをxlValuesに変更してください。
 数式が入っていれば全てを含む最終行の場合はそのままでOKです。

 (momo)

 アクセスなど別のアプリケーションから出力されたデータである場合、
「空白に見えるがデータで埋まっている」と認識されるケースがあるようです。
[[20040424045252]] 『空白なのに空白でない?』(よれっち)
 
この場合はEnd(xlUp)だと、1行目までジャンプしている?
(みやほりん)(-_∂)b

 >記載している情報は、全てマクロの記載をコピーした正確なものです。 
 >D5= のものは、例のつもりで書いています。 

 例のつもりとは、本当にあるうちの一つと云う意味ですね。
 すると、つじつまが合いません。

 プログラムの意味は
  新D列を挿入
  saigoにA列の最終データ行のある番号を代入
  2行目から作業を開始するが、継続条件は「A列のデータが空白でない間」だけとする
  その条件に合致した時、同じ行のD列に数式 "=SUMIF($A$2:$A$" & ・・・ を入力する。
 ですね。

 ここで、saigoが2以上なら、ここが1になるハズありません。数式は$A$2:$A$&saigo となっているのですから)
               ↓
 > D15=SUMIF($A$1:$A$2,A15,$C$1:$C$2) 

 一方、D15まで行ったのなら、A2〜A15は空白ではなかったことになります。

 2以上でないのに、15以上である、と云うものは存在し得ないと思います。

 (半平太) 2010/03/15 20:14

 こんにちは。佳です。

 デバッグ入門ですね ^^

 えっと。
 変な数式になるシートでは、saigoの値は何になっていますか。
 実際の最終行の行番号は何番ですか?
 どうしてそうなるか分かりますか?(ヘルプにヒントが書いてありますが...)
 それが分かったら対応方法も自然に分かってきます。

半平太さん

ありがとうございます。私も存在し得ないと思ったのですが、

マクロを途中までで切って、様子をみたところ、

D15の列はこのような関数が入力されておりまして…。

momoさん、みやほりんさん

ありがとうございます。

なるほどですね、「一番最後から空白でないところまでジャンプしてくれるはずが、

1行目までジャンプしている」。そんな状況です。

momoさんが記載されている方法を試してみたいと思います。

佳さん

ありがとうございます。

saigoの値は、変になっている方法は、どうも1になっているようなのです。

もともとが「2から最終行まで」になるところが、最終行が1と見なされているので、

「1から2まで」と認識してしまっているのかなと思います。

ちょっと、考えてみたいと思います。


 >Range("A" & Rows.Count).End(xlUp)
 このコードは、ワークシート上で
  A列の一番最後のセル
    (データの有る最後ではなく、ワークシートの一番最後の行のセル)
    を選択して、
  「Ctrl + ↑」のキー操作で移動したセル
 と同じセルに成ります。

 実際に操作をしてみて
  入力が有る最終行は、40000行なのに、A40000ではなくA1に移動した!!
 と言う事になれば、
  このままではデータのある最終セルを取得出来ない
 と、結論づけられると思います。

  手作業でやった場合、セルはちゃんとA40000に移動するのに
  マクロでやるとこの時の「40000」が得られない!!
 と言う事になれば、書いて居られるコードの中に
 何か思い違いがあると思います。

 実際に手を動かして確認してみられてはどうでしょう。

 (HANA) 

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.