Excel VBA質問箱 IV

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

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


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

【58093】配列に入れた行を一括取得するにはどうすればいいでしょうか ON 08/10/2(木) 11:07 質問[未読]
【58095】Re:配列に入れた行を一括取得するにはどう... Abebobo 08/10/2(木) 12:40 発言[未読]
【58096】Re:配列に入れた行を一括取得するにはどう... ON 08/10/2(木) 13:37 質問[未読]
【58100】Re:配列に入れた行を一括取得するにはどう... ON 08/10/2(木) 14:37 質問[未読]
【58102】Re:配列に入れた行を一括取得するにはどう... ハチ 08/10/2(木) 15:11 発言[未読]
【58104】Re:配列に入れた行を一括取得するにはどう... ON 08/10/2(木) 15:22 質問[未読]
【58105】Re:配列に入れた行を一括取得するにはどう... kanabun 08/10/2(木) 16:09 発言[未読]
【58125】Re:配列に入れた行を一括取得するにはどう... ON 08/10/4(土) 18:27 お礼[未読]
【58101】Re:配列に入れた行を一括取得するにはどう... neptune 08/10/2(木) 14:50 発言[未読]
【58103】Re:配列に入れた行を一括取得するにはどう... ON 08/10/2(木) 15:13 質問[未読]

【58093】配列に入れた行を一括取得するにはどうす...
質問  ON  - 08/10/2(木) 11:07 -

引用なし
パスワード
   こんにちは

1行ごとに判定して行うと時間がかかるので
配列で一括非表示にしたいと下記のようにしてみました

'←型が一致しません
となってしまいます

どうすれば、一括で行選択することが出来ますか

よろしくお願い致します


Sub a指定行非表示2() 'D列のセルがグレーなら行非表示


  Dim TG As Range
  Dim ck As Integer
  Dim myArray() As String
  Dim cnt_i As Integer
  
  
  cnt_i = 1
  ck = ActiveSheet.UsedRange.Rows.Count
  ReDim myArray(ck)
  
  Range(Cells(1, 4), Cells(ck, 4)).Select
  
  For Each TG In Selection
  
    If TG.Interior.ColorIndex = 15 Then

      myArray(cnt_i) = TG.Row
    
    End If
  
    cnt_i = cnt_i + 1
  
  Next
  
  
  'Rows(3).EntireRow.Hidden = True
  Rows(myArray(ck)).Select  '←型が一致しません
  'Rows(myArray(ck)).EntireRow.Hidden = True
  

End Sub

【58095】Re:配列に入れた行を一括取得するにはど...
発言  Abebobo  - 08/10/2(木) 12:40 -

引用なし
パスワード
   ON さんこんにちは

識者からの回答が有るまでのつなぎで

Sub a指定行非表示2() 'D列のセルがグレーなら行非表示
  Dim TG As Range
  Dim ck As Integer
'  Dim myArray() As String
  Dim cnt_i As Integer
  Dim myArray
 
  cnt_i = 1
  ck = ActiveSheet.UsedRange.Rows.Count
  Range(Cells(1, 4), Cells(ck, 4)).Select
  For Each TG In Selection
    If TG.Interior.ColorIndex = 15 Then
      myArray = myArray & TG.Row & ":" & TG.Row & ","
      Debug.Print myArray
    End If
    cnt_i = cnt_i + 1
  Next
  'Rows(3).EntireRow.Hidden = True
  Range(Mid(myArray, 1, Len(myArray) - 1)).Select '無理やり?
'  Rows(myArray(ck)).Select  '←型が一致しません
  'Rows(myArray(ck)).EntireRow.Hidden = True
  Range(Mid(myArray, 1, Len(myArray) - 1)).EntireRow.Hidden = True
End Sub

【58096】Re:配列に入れた行を一括取得するにはど...
質問  ON  - 08/10/2(木) 13:37 -

引用なし
パスワード
   Abebobo さん こんにちは

ありがとうございます
飛び飛び行の記述方法がわからず色々試行していました

ご提示頂いたコードで、ckが50ではOKでしたが
ck = ActiveSheet.UsedRange.Rows.Count
では、
実行時エラー '1004':
'Range' メソッドは失敗しました: '_Global' オブジェクト
となってしまいました
Rangeの制限は見つけられませんでしたが、何かありそうです

泥沼に足を突っ込んでしまったような・・・
何かありましたらよろしくお願い致します

【58100】Re:配列に入れた行を一括取得するにはど...
質問  ON  - 08/10/2(木) 14:37 -

引用なし
パスワード
   ふと
制限前に非表示にして、次の処理をすればと思い下記のようにしてみました

Sub a指定行非表示4x()  'D列のセルがグレーなら行非表示
  Dim TG As Range
  Dim ck As Integer
'  Dim myArray() As String
  Dim cnt_i As Integer
  Dim cnt_j As Integer
  'Dim myArray
  Dim myArray

  cnt_i = 1
  cnt_j = 0
  ck = ActiveSheet.UsedRange.Rows.Count
  
  Range(Cells(1, 4), Cells(ck, 4)).Select
  For Each TG In Selection
    If TG.Interior.ColorIndex = 15 Then
      myArray = myArray & TG.Row & ":" & TG.Row & ","
      'Debug.Print myArray
      cnt_j = cnt_j + 1
    End If
    
    If cnt_j = 40 Then ',が40毎に処理をする
    
      Debug.Print myArray
    
      Range(Mid(myArray, 1, Len(myArray) - 1)).Select  '←3回目でエラー
      Range(Mid(myArray, 1, Len(myArray) - 1)).EntireRow.Hidden = True
      
      myArray = ""
      cnt_j = 0
      
    End If
    
    cnt_i = cnt_i + 1
  Next
  'Rows(3).EntireRow.Hidden = True
  
  'Debug.Print myArray  '・・・・,178:178,
  'Debug.Print Mid(myArray, 1, Len(myArray) - 1) '・・・・,178:178
  Range(Mid(myArray, 1, Len(myArray) - 1)).Select '無理やり?
'  Rows(myArray(ck)).Select  '←型が一致しません
  'Rows(myArray(ck)).EntireRow.Hidden = True
  Range(Mid(myArray, 1, Len(myArray) - 1)).EntireRow.Hidden = True
  
  
End Sub

イミディエイトウインドウは
7:7,8:8,10:10,11:11,13:13,14:14,15:15,16:16,17:17,19:19,20:20,22:22,23:23,
24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,
38:38,39:39,40:40,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,
50:50,51:51,52:52,

53:53,54:54,56:56,57:57,58:58,59:59,60:60,62:62,64:64,65:65,67:67,68:68,
69:69,70:70,71:71,72:72,73:73,74:74,75:75,76:76,77:77,78:78,79:79,80:80,
81:81,82:82,83:83,84:84,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,
93:93,94:94,95:95,96:96,

97:97,98:98,99:99,100:100,101:101,102:102,103:103,104:104,105:105,106:106,
107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,
116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,
125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,
134:134,135:135,136:136,

が表示され 
  '←3回目でエラー
でとまってしまいました

ちなみに、表示する行は、DのセルをWクリックすることで、グレーをはずしています

対象行は1-178で、初期表示対象は、1-6,9,18,21,36,37,55,61,63,66のような感じです

アドバイスよろしくお願い致します

【58101】Re:配列に入れた行を一括取得するにはど...
発言  neptune  - 08/10/2(木) 14:50 -

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

なぜかは判りませんが、

>  Rows(myArray(ck)).Select  '←型が一致しません
やはり
myArray(ck)
がどうなっているか確認してみてはどうですか?
それを定数でやってみるとか、その行がどんな状態かとか。

原因を調べないと。

【58102】Re:配列に入れた行を一括取得するにはど...
発言  ハチ  - 08/10/2(木) 15:11 -

引用なし
パスワード
   ▼ON さん:

勘で書きますが。
これは、Rangeオブジェクトの引数に指定できる文字列を
超えているんじゃないですかね?
たしか、255文字くらいだったと思います。

neptuneさんも書かれていますように、
どこで止まるのか、検証するのが良いと思います。

>

【58103】Re:配列に入れた行を一括取得するにはど...
質問  ON  - 08/10/2(木) 15:13 -

引用なし
パスワード
   ▼neptune さん こんにちは
ありがとうございます

>やはり
>myArray(ck)
>がどうなっているか確認してみてはどうですか?
>それを定数でやってみるとか、その行がどんな状態かとか。
>
>原因を調べないと。
ですね

3回目でということで、メモリー系とかと思って考えても無駄か・・
と思ったのですが
調べてみると、もともとの設定上限が甘かったようです
3回目の行は100行以降に達しているのが原因でした
40→30で停止しなくなりました
確認方法が動けばいいや方式で恥ずかしいですが・・・

とりあえず、初期の目的は達することが出来ました
皆様ありがとうございました

別途、解等ありましたら
ご指導よろしくお願い致します

【58104】Re:配列に入れた行を一括取得するにはど...
質問  ON  - 08/10/2(木) 15:22 -

引用なし
パスワード
   ▼ハチ さん こんにちは
ありがとうございます

>勘で書きますが。
>これは、Rangeオブジェクトの引数に指定できる文字列を
>超えているんじゃないですかね?
>たしか、255文字くらいだったと思います。
知りませんでした。というか、そういえば、みたことあるか・・です
ありがとうございます

飛び飛び行の指定方法、ググッてはみたのですが
うまく見つけることは出来ませんでした
range以外にもあるような気がしているのですが・・・・

何かありましたらよろしくお願い致します

【58105】Re:配列に入れた行を一括取得するにはど...
発言  kanabun  - 08/10/2(木) 16:09 -

引用なし
パスワード
   こんにちは。

>飛び飛び行の指定方法、ググッてはみたのですが
>うまく見つけることは出来ませんでした

参考まで
Hideするセルそのものを覚えておいて(具体的には、Rangeオブジェクト型の
変数に Unionメソッドで貯め込んでおいて)、最後に一括 処理する
方法です。
この方法は決してスピードは速くなりません。
が、作業列を使って SpecialCellsメソッドで条件範囲を抽出するときのような
制限はありません。

Sub Try2()
 Dim TG As Range
 Dim rHide As Range
 
 For Each TG In Selection
   If TG.Interior.ColorIndex = 15 Then
     If rHide Is Nothing Then
       Set rHide = TG
     Else
       Set rHide = Union(rHide, TG)
     End If
   End If
 Next
 
 If Not rHide Is Nothing Then
   rHide.EntireRow.Hidden = True
 End If
End Sub

【58125】Re:配列に入れた行を一括取得するにはど...
お礼  ON  - 08/10/4(土) 18:27 -

引用なし
パスワード
   ▼kanabun さん:
ありがとうございます

遅くなりました

>変数に Unionメソッドで貯め込んでおいて)、最後に一括 処理する
>方法です。
>この方法は決してスピードは速くなりません。
>が、作業列を使って SpecialCellsメソッドで条件範囲を抽出するときのような
>制限はありません。

ありがとうございます
Union こういう風にもつかえるのですか
参考にさせて頂きます

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