[[20110715154032]] 『当てはまるNOの行を探し出して、それぞれのセルに』(煮干) ページの最後に飛ぶ

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

 

『当てはまるNOの行を探し出して、それぞれのセルに文字を入力するマクロ』(煮干)

 Excel2003です。
 マクロについて質問させてください。

 A列にNO.1〜NO.500ぐらいまでの文字が入っています(NO.によって5行あったり10行あったりします)
 やりたいのは、

 A1:変更したいNO
 A2:日付
 A3:状況(完了・調査・中止などを選ぶ)

 を入力してマクロを発動させると、適用するNOの行の文字が勝手に入力されるというものを作りたいです。

   A   B  C  D  E  F
 1 1   7/1  完了
 2
 3 NO. 品名 日付 状況
 4 1  苺  7/1  完了
 5 1  苺  7/1  完了
 6 1  苺  7/1  完了
 7 2  柿
 8 2  柿
 9 3  柘榴

 ↑分かりにくいですがこんな感じを希望しています。
 この表でいうと、C4〜D6までが自動的に入力されて欲しいです。
 どなたか分かる方、お教え頂けるとうれしいです。
 お願いいたします。


 >A1:変更したいNO
 >A2:日付
 >A3:状況(完了・調査・中止などを選ぶ)

 これは、

 A1:変更したいNO
 B1:日付
 C1:状況(完了・調査・中止などを選ぶ)

 の間違い?

 ぶらっと立ち寄り


 A1:変更したいNO
 B1:日付
 C1:状況(完了・調査・中止などを選ぶ)

 こうだとして、たとえばシンプルに。

 Sub Sample()
    Dim c As Range
    With Sheets("Sheet1")
        For Each c In .Range("A4", .Range("A" & .Rows.Count).End(xlUp))
            If c.Value = .Range("A1").Value Then
                c.Offset(, 2).Resize(, 2).Value = .Range("B1:C1").Value
            End If
        Next
    End With
 End Sub 

 ぶらっと立ち寄り

 お答えありがとうございます!

 ただ、文字の入力先をN:0列に替えようとして、
 c.Offset(, 13).Resize(, 2).Value = .Range("B1:C1").Value
 に変更すると、一気にマクロが重たくなってしまいます。
 軽くする方法はありますでしょうか?

 お分かりになる方、教えて頂けるとうれしいです。

 (煮干)

 確認1.
  計算方法を手動にしてやってみる
 確認2.
  ステップインで実行してみる
 確認3.
  ご提示のデータとマクロのみを再度入力した新しいファイルでやってみる

 結果から原因が分かるかもしれません。

 (HANA)

 コードそのものは Offsetをかえても、全く処理コストに影響がでないはず。
HANAさんが整理してくださり示唆されているように、
1.C,D列からN,O列にしたことで、N,O列の値を参照する(それもかなり重い)関数が存在するか。
2.N,O列のセルに対して、シートモジュールでChangeイベントコードがかかれているか。
3.シートが壊れているか。
4.ブックが壊れているか。
こんなことのほか、
5.モジュールシートそのものが壊れているか。
といったことが思いつく。
さらには(もしかしたら)このコード以外のロジックが追加で書かれていて、そことの相性のかねあいで足を引っ張っている。

 HANAさんからアドバイスあった方法で試してみてほしいのと、念のため、本当に動かしているコードを
コピペしてアップしてもらえれば、何か発見できるかも。

 ぶらっと立ち寄り

 かりに原因が、いままで想定している内のどれかだとして、その影響を極力排除するようなコード。一度試してみて。

 Sub SampleV()
    Dim v As Variant
    Dim i As Long
    Dim svCal As Long
    Dim svEvt As Boolean
    Dim myNum As Variant
    Dim myD As Variant, myS As Variant

    svCal = Application.Calculation
    svEvt = Application.EnableEvents

    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    With Sheets("Sheet1")
        myNum = .Range("A1").Value
        If Len(myNum) = 0 Then
            MsgBox "No が未入力です"
        Else
            v = .UsedRange.Offset(4).Value
            myD = .Range("B1").Value
            myS = .Range("C1").Value
            For i = 1 To UBound(v, 1)
                If v(i, 1) = myNum Then
                    v(i, 14) = myD
                    v(i, 15) = myS
                End If
            Next
            .Range("A4").Resize(UBound(v, 1), UBound(v, 2)).Value = v
        End If
    End With

    Application.EnableEvents = svEvt
    Application.Calculation = svCal

 End Sub

 ぶらっと立ち寄り

 お返事が遅くなりまして大変申し訳ございません。
 こちらのやりかたで試してみますね!
 何度もほんとうにありがとうございます!

(煮干)


コメント返信:

[ 一覧(最新更新順) ]


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