Excel VBA質問箱 IV

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

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


3650 / 13646 ツリー ←次へ | 前へ→

【60939】オートフィルタ抽出後の可視セルにのみ数式設定する方法 miyakken 09/3/25(水) 23:55 質問[未読]
【60944】Re:オートフィルタ抽出後の可視セルにのみ... 超初心者 09/3/26(木) 9:34 発言[未読]
【60950】Re:オートフィルタ抽出後の可視セルにのみ... miyakken 09/3/26(木) 19:34 お礼[未読]
【60945】Re:オートフィルタ抽出後の可視セルにのみ... kanabun 09/3/26(木) 10:01 発言[未読]
【60951】Re:オートフィルタ抽出後の可視セルにのみ... miyakken 09/3/26(木) 19:38 お礼[未読]

【60939】オートフィルタ抽出後の可視セルにのみ数...
質問  miyakken  - 09/3/25(水) 23:55 -

引用なし
パスワード
   VBA初心者です。ご教授ねがいます。

下記のようなデータがあるとします。(実際は2000行20列ほど)

A   B   C    D   E        1行
            217,769         2行
月 日    借方CD    貸方CD    取引金額    残高   3
       現金                4
          現金           5
                      6
月日    借方CD    貸方CD    取引金額    残高   7
210301    現金    当座預金    50,000         8
210301    雑費    現金    423    
210301    旅費    現金    200    
210301    旅費    現金    150    
210301    租税公課    現金    2,000    
210301    通信費    現金    1,600    
210301    旅費    現金    1,400    
210301    雑費    現金    735    
210310    現金    売掛金    27,470    
210311    当座預金    雑収入    6,443    
210311    受取手形    売掛金    100,000    
210311    雑費    現金    600    
210311    厚生費    現金    500    
210311    厚生費    現金    1,360    
210311    雑費    現金    13,099    
210311    雑費    現金    4,200    
210311    厚生費    現金    168    
210312    雑費    現金    1,400    
210312    雑費    現金    1,000    
210312    雑費    現金    3,150    
210312    雑費    現金    150    
210312    雑費    現金    1,400    
210330    雑費    現金    321      30行


Sub 借方2()

Dim g As Integer
Dim retu As Integer
Dim gyou As Integer    '最終行
Dim kingaku As Integer
Dim karikata As Integer
Dim kasikata As Integer

  With ActiveSheet.UsedRange
     gyou = .Rows(.Rows.Count).Row
     End With

  kingaku = Application.Match("取引金額", Rows(3), False)
  retu = Application.CountA(Rows(3))
  
  Range(Cells(7, 1), Cells(gyou, retu)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
  Range(Cells(3, 1), Cells(5, retu)), Unique:=False
  

karikata = Application.Match("借方CD", Rows(3), False)


For g = 8 To gyou

  If Cells(g, karikata) = Cells(4, karikata) Then
    Cells(g, kingaku + 1) = Cells(g, kingaku)
     
  Else: Cells(g, kingaku + 1) = -Cells(g, kingaku)
    
  End If
Next

End Sub

上記のマクロですと全ての行の残高列に値が挿入され、処理にかなり
時間がかかってしまいます。
オートフィルタ後の可視セルにのみ、残高行へのマクロを実行するには
どうしたらいいでしょうか?
他のシートに貼り付ける方法以外でありますでしょうか?

よろしくおねがいします。

【60944】Re:オートフィルタ抽出後の可視セルにの...
発言  超初心者  - 09/3/26(木) 9:34 -

引用なし
パスワード
   ▼miyakken さん:
> 'For g = 8 To gyou
Dim myRg As Range
For Each myRg In Range(Cells(8, kingaku), Cells(gyou, kingaku)).SpecialCells(xlCellTypeVisible)
  g = myRg.Row

こんな感じでどうでしょう。
テストはしてませんので、動かなかったらゴメンなさい。

【60945】Re:オートフィルタ抽出後の可視セルにの...
発言  kanabun  - 09/3/26(木) 10:01 -

引用なし
パスワード
   ▼miyakken さん:
こんにちは。

>  Range(Cells(7, 1), Cells(gyou, retu)).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
>  Range(Cells(3, 1), Cells(5, retu)), Unique:=False
>  

>For g = 8 To gyou
>Next

これは、せっかくフィルタオプションで条件付けて行を抽出しているのに、
> For g = 8 To gyou
のLoop処理は、フィルタされた行に対してだけでなく
すべての行について
  「借方CD」が「現金」なら +金額
  そうでなければ      −金額
を「残高」欄に書き込んでいるから、効率わるいですよね?
また、Else で 「借方CD」が「現金」でないすべての行が
  −金額
となってしまいますけど、意図した処理ですか?

↓フィルタかけないサンプルです。

Sub Try2()
  With Range("A7").CurrentRegion
    With Intersect(.Columns(5), .Columns(5).Offset(1))
      .ClearContents
      .Formula = _
       "=IF(B8=$B$4,D8,IF(C8=$B$4,-D8,""""))"
      .Value = .Value
    End With
  End With
End Sub

※[$B$4] には「現金」

【60950】Re:オートフィルタ抽出後の可視セルにの...
お礼  miyakken  - 09/3/26(木) 19:34 -

引用なし
パスワード
   返信ありがとうございます。

希望通りに無事動きました。

【60951】Re:オートフィルタ抽出後の可視セルにの...
お礼  miyakken  - 09/3/26(木) 19:38 -

引用なし
パスワード
   −金額は、意図した処理です。

返信ありがとうございました。解決しました。

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