[[20050901122048]] 『ラベルへの印刷』(banzai) ページの最後に飛ぶ

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

 

『ラベルへの印刷』(banzai)
 ちょっと矛盾してるところもあったので質問の内容を
 変えさせて頂きます。
 Sub ラベル印刷()
 With Worksheets("データ抽出")
 Set ws2 = Worksheets("印刷リスト")
    For Each r In .AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible)
        If r.Row > 1 Then
          ws2.Range("c3").Value = .Cells(r.Row, 7).Value
        End If
    Next r
 End With
 End Sub 

 上記のような場合で、
  ws2.Range("c3").Value = .Cells(r.Row, 7).Value
 はフィルターで表示された最上段の2列を参照して
 r.Row行、7列(見かけ上は1行7列)を指していますが
 見かけ上の2行7列はどのような表記になるのでしょうか?
 .Cell(r.Row + 1, 7)ではフィルターがかかってない状態での
 次の行を指してしまいます。
 よろしくご教示願います。
  Win XP エクセル2003


 .AutoFilter.Range.Columns(2)・・・を変数にセットして使った方が良いかも。

 With .AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible)
     If .Count > 1 Then
        'ws2.Range("c3").Value = .Cells(2, 7).Value
        MsgBox .Cells(2, 7).Value
     End If
 End With

 勘違いしていたみたいですので、修正しました。
 まだ、勘違いしていたらすみません?
 BJ


 すいません。
 思ったような感じと違います・・
 オートフィルタがかかった状態で見かけ上の1行・2行・3行・・・
 と順番に値を取得したいのです。
 例えば、オートフィルタで1行目・3行目・5行目が選択された場合
 画面上にはこの3行が1行目・2行目・3行目となっています。
 この部分だけを取得したいのです。

      A          B           C           D
 1  
 2
 3
 4
 5
 フィルタをかけると↓
     A          B             C          D
 1
 3
 5
 この場合、 .Cells(r.Row, 7)はセルG1を選択します。
 次に.Cells(r.Row + 1, 7) はG2を選択します。
 このときフィルタによってG3を選択したいのですがその方法が
 わからなくてお聞きしております。
 説明が下手ですいません・・
 (banzai)    

 .Range.Columns(2) こういう書きかたを、1度もした事が無いので気づかなかったけど...。
 抽出場所は、ここであっているんでしょうか?
 選択させてみたら、C列を選択してますが・・・・。

 With .AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible)
     .Select
     If .Count >= 3 Then
        MsgBox .Cells(3).Value
        MsgBox .Cells(3).Offset(, 4).Value
     End If
 End With
 BJ

 >>選択させてみたら、C列を選択してますが・・・・。
 >オートフィルタの2列目・・・
 >フィルタがB列から掛かってる場合はC列になりますね。
 >でも、わかって使っていれば問題ないんじゃないんですか?
 いや問題あります。
 こっちは、データがどうなっているのか解らないから・・・。

 突っ込まれたついでに
 >Set r = .Find("*", , xlValues, xlWhole, xlByRows, xlNext, True)
 >If Not r Is Nothing Then
 >   Set r = .FindNext(r)
 >   MsgBox r.Value
 これって、2度手間だと思います。
 BJ

最終的に何をしたいのかがよく分からないけど、オートフィルタ後の見かけ上の行数を独自にカウントするような作りにしてみても良いんでないですかね?

(ご近所PG)


 いまだに意味がわからないんだけど、

 >例えば、オートフィルタで1行目・3行目・5行目が選択された場合
 >画面上にはこの3行が1行目・2行目・3行目となっています。
 >この部分だけを取得したいのです。
 最初のコードはそのようになっていませんか?
 私は何か勘違いしてるのでしょうか。 (アカギ)

 Sub ラベル印刷()
     With Worksheets("sheet1")
     Set ws2 = Worksheets("sheet2")
     For Each r In .AutoFilter.Range.Columns(2).SpecialCells(xlCellTypeVisible)
         If r.Row > 1 Then
             MsgBox r.Row
         End If
     Next r
     End With
 End Sub

 >突っ込まれたついでに
別に突っ込んだつもりもありませんけどね。
なんか気分がわるいので削除しておきました。
(SoulMan)

 作業シートを一つ用意してそこにコピーしてそこで設定されてはどうでしょうか?
(SoulMan)

 >これって、2度手間だと思います。
2度手間じゃない方法を書けばいいんじゃないの?
(SoulMan)

 まぁ、そんなに言葉の売り買いしなくても。
 
二度手間云々については、手間っていうか、現在の次のセルを探す為にFindNextしたんですよね。
それもありだと思います、普通に。
 
参照範囲云々は、質問者さんが勘違いしてはいけないなとの思いからBJさんは発言されたのだろうと想像しますが、
そこをSoulManさんは自身を指していると想像されたのか知れません。
 
きっと些細な言葉のすれ違い。まぁ、どうか一つまったりと。
(ご近所PG)

 こんばんは!私も最初のやりとりは見てなかったのでなんとも言えませんが、
 今回のトピ主さんのご質問の趣旨は
 >この場合、 .Cells(r.Row, 7)はセルG1を選択します。
 >次に.Cells(r.Row + 1, 7) はG2を選択します。
 >このときフィルタによってG3を選択したいのですがその方法が
 >わからなくてお聞きしております。
 なので、
 >次に.Cells(r.Row + 1, 7) はG2を選択します。
 ↑
 この様な記述の仕方で
 >このときフィルタによってG3を選択したいのですがその方法が
 G3を選択したいのだと私は解釈しました。(つまり次ぎの行のことです。)
 なので、、
 列は関係ないんじゃないんですか?
 とお答えしたのです。もう削除してありませんが、Findの回答の最後に
 >私ならコピーしてすると思います。
 という内容のコメントを入れていたと思います。 
 つまり、
 >作業シートを一つ用意してそこにコピーしてそこで設定されてはどうでしょうか?
 コピーして貼り付けてしまえば、可視セル・・・も関係なくなるのでそれが一番簡単では?
 ということです。
 誤解があってもいけませんので、一応コメントしておきます。
(SoulMan)


 >>突っ込まれたついでに
 >別に突っ込んだつもりもありませんけどね。
 >なんか気分がわるいので削除しておきました。
 >(SoulMan)

 >>これって、2度手間だと思います。
 >2度手間じゃない方法を書けばいいんじゃないの?
 >(SoulMan)

  略
 >誤解があってもいけませんので、一応コメントしておきます。
 >(SoulMan)
 これは、私に対しての弁解も含んでいるのでしょうかねぇ?

 なんか勝手に一人で突っ走って、絡んだあげくに削除しましたと。
 いい子ぶっているけど、こっちの方が気分が悪いです。

 質問者さんへ
 提示したコードを試しもせずに見た目だ判断しないで下さい。
 >思ったような感じと違います・・
 試していれば、こう言った返答は返ってこないはずです。

 めちゃくちゃ気分が悪いので終わり。
 kazuさんへ不適当と思われたら削除してください。

 BJ

 もうしわけございませんでした。
 僕の説明が不十分なためにみなさんに多大なご迷惑をおかけし、
 気分を害してしまいました。
 提示していただいたコードは試して、さらに自分でそれをアレンジして
 つかったみましたが、意図した結果が得られなかったので
 提示されたコードが原因ではなく、それ以前に自分の説明がおかしいから
 とおもったので、思った感じと違うという表現になってしまいました。
 本当にごめんなさい。
 とりあえず、別シートを作成してそこへフィルタしたデータを移行して
 処理するようにしました。
 色々と参考にさせてもらいましたが、僕の理解不足が一番大きいみたいです・・・
 本当に皆さんありがとうございました。そしてすいませんでした。
 (banzai)

 >これは、私に対しての弁解も含んでいるのでしょうかねぇ?
 そんなもんは含んでません。
 >いい子ぶっているけど、こっちの方が気分が悪いです。
 何が?
(SoulMan)

 > 絡んだあげくに削除
 このような事態が発生するので、一度投稿した文章に対して回答があった場合、
 管理者以外は記事を削除しないほうが良いのでしょう。(マナーとして)
 自分の投稿に対して反論等があった場合、自分が何故そのように書いたのかを
 さらに説明して意見を交わし続ければ、「些細な言葉のすれ違い」 は
 起こらないと思います。 
   (INA)

 >管理者以外は記事を削除しないほうが良いのでしょう。(マナーとして)
 ですね。この点については反省しています。勉強中の皆さん、すみませんでした。
 ということで、校長先生、私が削除した部分を復元出来ますでしょうか?
 もしも、可能であればお手数をお掛けしますが、よろしくお願い致します。
 ただ、突っ込んだとか、絡んだとか言われてるけど、私としては逆に
フォローしたつもりが2度手間と評されて馬鹿らしくなって削除したしだいでした。
 でも結果としてこの様な事態になってしまったことは大変残念です。
 しかし、あからさまに別の回答者のコードを引用して
 >>>選択させてみたら、C列を選択してますが・・・・。
 >>オートフィルタの2列目・・・
 >>フィルタがB列から掛かってる場合はC列になりますね。
 >>でも、わかって使っていれば問題ないんじゃないんですか?
 >いや問題あります。
 >こっちは、データがどうなっているのか解らないから・・・。
 >突っ込まれたついでに
 >>Set r = .Find("*", , xlValues, xlWhole, xlByRows, xlNext, True)
 >>If Not r Is Nothing Then
 >>   Set r = .FindNext(r)
 >>   MsgBox r.Value
 >これって、2度手間だと思います。
 >BJ
 はどうかと思いますね。
 と言ってもそれぞれ考え方がありますから、どう思うかは自由ですけどね。
 でも、トピ主さんの答えにもある様に
 >とりあえず、別シートを作成してそこへフィルタしたデータを移行して
 >処理するようにしました。
 なので、
 >いや問題あります。
 >こっちは、データがどうなっているのか解らないから・・・。
問題なかったでしょ?
 Findの回答もしたけど、コピーしたらとアドバイスしてるから
 どっちを取るかはトピ主さん次第で
 >これって、2度手間だと思います。
2度手間じゃないでしょ?
 私もよくピント外れの回答をしますが、そんなときは大抵、俗にいう
「突っ込み」が入りますね。
 でも、それを「フォロー」と取るか、「突っ込み」と取るかの違いじゃないんでしょうか?
(SoulMan)


 >「フォロー」と取るか、「突っ込み」と取るかの違いじゃないんでしょうか?
 良いように取ってもらえれば何のことはない文章でも
 悪いように取られてしまうと火種になってしまうことはありますからね。

 どんな花が咲くか分からない種をまく(投稿する) のだから
 種が芽を出して変な育ち方をしないよう面倒をみてあげる必要があるのでしょう。
 育ちかけた芽を切ったり、枯らしてしまわないようにするのが
 投稿する人のマナーなのかもしれません。
  (INA)

コメント返信:

[ 一覧(最新更新順) ]


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