none
ExcelVBAについて RRS feed

  • 質問

  • Sub 縞模様()
    Dim c As Range
    Dim myCol As Long
    Dim cellco As Long
    Set cellco = CLng(Worksheets("Sheet2").Range("A1").Value)
    cellco = CLng(Worksheets("Sheet2").cells(1, 1).Value)
    Worksheets("Sheet2").Range("A1").Interior.Color = cellco
    For Each c In Worksheets("Sheet2").Range("A1:A10")
            If c.Row Mod 2 = 1 Then
                myCol = 4
            Else
                myCol = 6
            End If
            c.Interior.Color = myCol
        Next c
    End Sub

    上記のコードが以前は動いていたのですが何もコードを変えていないのに急に動かなくなりました。

    OFFICE2007です。

    それから、時々参考書のサンプル・動いている画像付きのコードが動かないのですがバグでしょうか?

    速度が大変遅いコードがあるのですがこれもバグでしょうか?

    下記に記します。

    Sub サンプル()
    Dim cshr As Long, cswr As Long, cshi As Long, cshj As Long
    cshr = 17.5
    cswr = 5
    For cshi = 1 To 1024
    For cshj = 1 To 1024
     Worksheets("Sheet2").cells(cshi, cshj).RowHeight = cshr
        Worksheets("Sheet2").cells(cshi, cshj).ColumnWidth = cswr
        Worksheets("Sheet1").cells(cshi, cshj).FONT.Name = "Meiryo UI"
        Next cshj
        Next cshi
    End Sub

    • 移動 星 睦美 2015年3月16日 8:26 Visual Basic から
    2015年3月15日 12:03

すべての返信

  • 最後に正常に動いていたのはいつで、動かなくなったのはいつでしょうか?
    このケースで真っ先に思い付くのはWindows Updateの影響です。


    2014 年 12 月の Office の更新後に VBA が使えなくなったら...
    http://yamanxworld.blogspot.jp/2014/12/2014-12-office-vba.html

    #ちなみに先日のWindows UpdateのOffice関連のアップデートにより、動作しなくなったActive Xがあり、クラシックASPのアプリが使用不能になったケースもありました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年3月15日 13:33
    モデレータ
  • そのコードはエラーで動きませんよ?

    Sub 縞模様()
        Dim c As Range
        Dim myCol As Long
        Dim cellco As Long
        '値をSetすることは不可能
        'Set cellco = CLng(Worksheets("Sheet2").Range("A1").Value)
        cellco = CLng(Worksheets("Sheet2").Cells(1, 1).Value)
        Worksheets("Sheet2").Range("A1").Interior.Color = cellco
        For Each c In Worksheets("Sheet2").Range("A1:A10")
                If c.Row Mod 2 = 1 Then
                myCol = 4 'RGB(0,0,4)をしたいのでしょうか?
            Else
                myCol = 6 'RGB(0,0,6)をしたいのでしょうか?
            End If
            c.Interior.ColorIndex = myCol'色の値ではなく色のインデックスと思われる
        Next c
    End Sub

    二つ目のコードが遅いのはバグではないですよ。単にコードのつくりが悪いだけです。
    単純に考えて1024*1024=1048576回も画面を書き換えることになる無駄なコードです。
    わざわざ1セルずつ処理する必要は全くありません。

    セルは1つだけ高さを変えると同じ列に属していれば行に関係なくすべて同じ高さになります。
    同様に1つだけ幅を変えると同じ行に属していれば列に関係なく同じ幅になります。
    フォントも範囲を全部選択してからその範囲に対して行えば1回で済みます。
    繰り返しの数は可能な限り少なくなるようにしましょう。

    Sub サンプル()
        Dim cshr As Long, cswr As Long, cshi As Long, cshj As Long
        cshr = 17.5
        cswr = 5
    
        Dim ws1 As Worksheet
        Dim ws2 As Worksheet
        Set ws1 = Worksheets("Sheet1")
        Set ws2 = Worksheets("Sheet2")
        
        ws2.Rows("1:1024").RowHeight = cshr
        ws2.Range(ws2.Columns(1), ws2.Columns(1024)).ColumnWidth = cswr
        Dim r As Range
        Set r = ws1.Range(ws1.Cells(1, 1), ws1.Cells(1024, 1024))
        r.Font.Name = "Meiryo UI"
    End Sub
    参考書のサンプルが動かないというのは例示されていないのではっきりしませんが、何か勘違いしている可能性が非常に高いでしょう。

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2015年3月15日 13:44
    2015年3月15日 13:43
  • フォーラム オペレーターの星 睦美です。
    ユーザー1 さん、こんにちは。

    投稿の質問にフォーラム ユーザーからの回答をいただいていますので、確認して返信いただければと思います。
    参考になる回答には、投稿者からの[回答としてマーク] をお願いします。

    (今回の質問はのちほど Visual Basic for Application (VBA) フォーラムにスレッドを移動させていただきます。)

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年3月16日 0:34