Excel VBA質問箱 IV

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

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


195 / 3841 ページ ←次へ | 前へ→

【78553】Re:行と列が可変の行列計算
発言  マルチーズ  - 16/11/5(土) 10:45 -

引用なし
パスワード
   Q&Aサロンとマルチポスト。

ここはマルチポストOKだけれどもそれは相手先もマルチポストOKの場合だけ。
Q&Aサロンはマルチポスト禁止。

さらにあちらで注意されているのにまったく無視。
こちらも無視の可能性が高いね。
・ツリー全体表示

【78552】Re:行と列が可変の行列計算
発言  sy  - 16/11/5(土) 10:25 -

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

一例です。
A列最終行の1つ下にA2〜最終行までを合計する記述です。

  Range("A" & Rows.Count).End(xlUp).Offset(1).FormulaR1C1 = "=SUM(R2C:R[-1]C)"
・ツリー全体表示

【78551】Re:行と列が可変の行列計算
発言  sy  - 16/11/4(金) 20:45 -

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

こんばんわ。
なんの計算をするんですか?

最終行にSUM関数で合計値を出すとかですか?

最終行を求めたいなら例えば、
Range("A" & Rows.Count).End(xlUp).Row
などで最終行を求められます。

最終列は、
Cells(1, Columns.Count).End(xlToLeft).Column
などで求められます。
・ツリー全体表示

【78550】行と列が可変の行列計算
質問  yuki  - 16/11/4(金) 10:12 -

引用なし
パスワード
   既に行と列が分かっている行列の計算はできるのですが、途中で行と列が増えた場合の行列計算はどのように組めよろしいでしょうか。ご教授頂けたら幸です。
・ツリー全体表示

【78549】Re:階層ごとにキーワード例えばifの色を...
回答  γ  - 16/11/3(木) 11:39 -

引用なし
パスワード
   ▼北海 さん:
>テキストエディターを使うのでなく、VBA上で設定できないのでしょうか?
できません。
インデントをつけることで十分に機能を果たしているはずです。
そういう機能を求めるなら、別のIDEを探してください。
・ツリー全体表示

【78548】Re:階層ごとにキーワード例えばifの色を...
発言  β  - 16/11/2(水) 23:47 -

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

たとえば、アップした Sample1 、インデント幅が 4 ですが、これを 6 にすると
以下になります。どうでしょう。
あまり、かわりないですかね?

Sub Sample1()
   If Range("A1").Value = 1 Then
   
      Range("F1").Interior.Color = vbRed
      
      If Range("A2").Value = 1 Then
         Range("F2").Interior.Color = vbRed
      ElseIf Range("A2").Value = 2 Then
         Range("F2").Interior.Color = vbYellow
      Else
         Range("F2").Interior.Color = vbBlack
      End If
      
   Else
   
   Range("F1").Interior.Color = vbBlue
   
      If Range("A2").Value = 1 Then
         Range("F2").Interior.Color = vbMagenta
      ElseIf Range("A2").Value = 2 Then
         Range("F2").Interior.Color = vbBlue
      Else
         Range("F2").Interior.Color = vbCyan
      End If
      
    End If

End Sub
・ツリー全体表示

【78547】Re:階層ごとにキーワード例えばifの色を...
発言  β  - 16/11/2(水) 23:44 -

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

VBE画面での階層ごとのキーワードの色がえはできないと思います。
視覚的にわかりやすくしたいということですね?

インデント幅を 5 とか 6 とか、大きく(深く)すれば、少しはましかも。
・ツリー全体表示

【78546】Re:階層ごとにキーワード例えばifの色を...
発言  β  - 16/11/2(水) 23:10 -

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

なるほど、なるほど。
VBE画面のことでしたか。

どうでしょうねぇ。
できないんじゃないかな。
・ツリー全体表示

【78545】Re:階層ごとにキーワード例えばifの色を...
発言  sy  - 16/11/2(水) 22:32 -

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

多分質問者さんや独覚さんの言われているのはVBE上でIFの色を一つづつ違う色にしたいと言う事だと思います。

IF 〜 THEN ←この一行が赤色
 IF 〜 THEN ←この一行が青色

そんな事出来るのかな?
・ツリー全体表示

【78544】Re:AutoFilterによる 配列を使ったあい...
発言  めがめが  - 16/11/2(水) 17:29 -

引用なし
パスワード
   tree=75645
に、フィルターオプションを使用した方法の回答がありました。
試しましたが、やはり、フィルターオプションでは、
さらに、絞り込みができません。

また別サイトに、
完全一致なら、xlFilterValues で、いくつでも配列指定ができますが、含まない や ワイルドカードには3つ以上対応していませんというような記述がありました。やはり、VBAの仕様上無理のようです。

絞り込んだデータを、別シートにコピー貼り付けして、それをさらに絞り込みなどして、必要なデータを抽出したいと思います。ありがとうございました。
・ツリー全体表示

【78543】Re:AutoFilterによる 配列を使ったあい...
発言  β  - 16/11/2(水) 17:08 -

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

>ですが、このAdvancedFilterは、CriteriaRangeによる指定しかできず、
>あいまい検索を配列格納しての抽出ができません。

はい。配列化したものに限らず、

オートフィルターは検索条件をコード上で規定する。
フィルターオプションは検索条件欄に記載してそれを指定する。

という仕様ですから。
配列内にある検索条件を検索欄に落とし込んで実行すればいいだけのことです。
・ツリー全体表示

【78542】Re:AutoFilterによる 配列を使ったあい...
発言  β  - 16/11/2(水) 17:05 -

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


>フィルターオプションというのは、
>VBAを使用しないで、
>エクセルにそなわっているフィルターオプションですか?
>それとも、AdvancedFilterの事ですか?
>

両方ともフィルターオプションです。
VBAで実行する場合は AdvancedFilterというメソッドになるだけです。

オートフィルターも、VBAで実行する場合は AutoFilterメソッドになりますよね。

フィルターオプションは、名前の通り Advanced です。
オートフィルターより、さらにきめの細かなAndやOrの抽出条件設定ができますし
必要列のみ抜出ということも、いとも簡単にできますし、
最初から別シートに抜き出すことも、いとも簡単にできます。
・ツリー全体表示

【78541】Re:AutoFilterによる 配列を使ったあい...
質問  めがめが  - 16/11/2(水) 16:53 -

引用なし
パスワード
   ▼マナ さん:
>▼めがめが さん:
>フィルターオプション(詳細設定)を使いましょう。
>使ったことがないなら、まずは手作業で可能かどうか確認してみるとよいです。
ご回答ありがとうございます。

フィルターオプションというのは、
VBAを使用しないで、
エクセルにそなわっているフィルターオプションですか?
それとも、AdvancedFilterの事ですか?

ですが、このAdvancedFilterは、CriteriaRangeによる指定しかできず、
あいまい検索を配列格納しての抽出ができません。
CriteriaRangeで指定する範囲の検索キーに、「*あ*」などと検索キーを入力して3つ以上検索はできます。が、それは、最初の質問でも書きましたが、
AutoFilter fieldのCriteriaRangeを使用した場合も同様にできます。

ただ、
AdvancedFilterにしろ、AutoFilterにしろ、CriteriaRangeを使用して検索をすると、
その抽出された結果を自分で確認し、

再度、他のマクロの別条件でさらに、絞り込みをかけると、一旦フィルターが解除されてしまい、絞り込みができません。

VBAの仕様上なのか、どういうわけか、AutoFilterのCriteria1による抽出の場合、抽出された結果を再度別条件でさらに絞り込みができます。

ですが、最初の質問でも書きましたが、AutoFilterのCriteria1の場合
あいまいなキー「*あ*」「*い*」と2つまでならできますが、
「*あ*」「*い*」「*う*」と3つになるとできません。
抽出結果が0件で、フィルターの矢印しかでなくなります。
・ツリー全体表示

【78540】Re:階層ごとにキーワード例えばifの色を...
発言  β  - 16/11/2(水) 16:13 -

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

なるほどです。

▼北海さん

独覚さんから回答がありますが、具体例でサンプルです。

Sub Sample1()
  If Range("A1").Value = 1 Then
  
    Range("F1").Interior.Color = vbRed
    
    If Range("A2").Value = 1 Then
      Range("F2").Interior.Color = vbRed
    ElseIf Range("A2").Value = 2 Then
      Range("F2").Interior.Color = vbYellow
    Else
      Range("F2").Interior.Color = vbBlack
    End If
    
  Else
  
    Range("F1").Interior.Color = vbBlue
    
    If Range("A2").Value = 1 Then
      Range("F2").Interior.Color = vbMagenta
    ElseIf Range("A2").Value = 2 Then
      Range("F2").Interior.Color = vbBlue
    Else
      Range("F2").Interior.Color = vbCyan
    End If
    
  End If
  
End Sub

Sub Sample2()

  Select Case Range("A1").Value
  
    Case 1
    
      Range("F1").Interior.Color = vbRed
      
      Select Case Range("A2").Value
      
        Case 1
          Range("F2").Interior.Color = vbRed
        Case 2
          Range("F2").Interior.Color = vbYellow
        Case Else
          Range("F2").Interior.Color = vbBlack
      End Select
    
    Case Else
    
      Range("F1").Interior.Color = vbBlue
    
      Select Case Range("A2").Value
      
        Case 1
          Range("F2").Interior.Color = vbMagenta
        Case 2
          Range("F2").Interior.Color = vbBlue
        Case Else
          Range("F2").Interior.Color = vbCyan
    End Select
    
  End Select
  
End Sub
・ツリー全体表示

【78539】Re:階層ごとにキーワード例えばifの色を...
発言  独覚  - 16/11/2(水) 14:59 -

引用なし
パスワード
   ▼β さん:
If 〜 Then
  〜
  If 〜 Then
    〜
  End If
End If

のような場合に対応がわかりやすいように外側のIfと内側のIfで色を変えたいのでは?
・ツリー全体表示

【78538】Re:階層ごとにキーワード例えばifの色を...
発言  β  - 16/11/2(水) 12:44 -

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

>階層ごとにキーワード例えばifの色を変えたいのですが、方法はありますか?

はい。なんとでもなると思います。
でも、質問文が、なぞなぞ のような感じです。

階層って?
if の色を変える?

具体的な例を、言葉で説明できませんか?

たとえば、マクロを忘れて、小学生に、方眼紙に色を塗ってください。
このような条件で塗ってくださいね と、そう指示して、ちゃんと、
その小学生が色を塗れるように。
・ツリー全体表示

【78537】階層ごとにキーワード例えばifの色を変え...
質問  北海  - 16/11/2(水) 11:09 -

引用なし
パスワード
   階層ごとにキーワード例えばifの色を変えたいのですが、方法はありますか?
テキストエディターを使うのでなく、VBA上で設定できないのでしょうか?
・ツリー全体表示

【78536】Re:AutoFilterによる 配列を使ったあい...
発言  マナ  - 16/11/1(火) 20:37 -

引用なし
パスワード
   ▼めがめが さん:
フィルターオプション(詳細設定)を使いましょう。
使ったことがないなら、まずは手作業で可能かどうか確認してみるとよいです。
・ツリー全体表示

【78535】AutoFilterによる 配列を使ったあいまい...
質問  めがめが  - 16/11/1(火) 18:03 -

引用なし
パスワード
   はじめまして。めがめがといいます。
よろしくお願いします。

漫画シートと抽出シートがあり、
抽出シート
    E列    F列    J1=3  
1行目 タイトル タイトル
2行目 *あ*    あ
3行目 *い*    い
4行目 *う*    う
J1は、抽出シートに直接関数を入れて、タイトルを除くタイトルの個数を
CONTA関数で取得し表示しています。
F列にタイトルの一部を入力し、VBAで、抽出する際に、
E列に*を前後につけた物を転機し、それらを配列に格納し、
その配列を使用して、
漫画シートを、あいまい検索をかけています。
配列を使用しているのは、この検索をした後にまた別のマクロを
実行する場合があり、Criteria1をどうしても使用したいからです。
CriteriaRangeで、E列の抽出タイトルの部分を選択して、抽出すると、
オートフィルターの矢印がつかないので、
その後、さらに、他のマクロで、再度別条件で絞り込んいく事ができません。
その為、Criteria1の方を使用しています。ただ、この配列による抽出は、
完全一致などだとうまくいくんですが、
上記のような、あいまい検索の場合、2件までしか正常に作動しません。
*あ*
*い*
まででしたら、それらを配列に格納して、抽出できますが、
*あ*
*い*
*う*
になると、結果は0件で、漫画シートには何も表示されません。
どうしたら、Criteria1の配列を使用した検索で、3件以上のあいまい検索ができますか?または、CriteriaRangeを使用して絞り込んだデータを一旦、目視して、必要な時、別のマクロで別条件でさらに絞り込む事は可能ですか?可能でしたら、
わざわざ、Criteria1の配列による検索などしないのですが。
コードはこういうのを書いています。

Sub 漫画タイトル抽出2()

'一旦 フィルター解除
  If Worksheets("漫画").FilterMode = True Then
   Worksheets("漫画").ShowAllData
  End If
  
 Sheets("抽出").Select
 
'抽出シート 以前のタイトル 事前に一旦クリア

 With Cells(50000, 5)
  '最終行の1つ下の行を取得。これを、最終行のみ取得すると、タイトル列に何も入力されてない場合に、見出しのE1まで消えてしまう。その為.Offset(1,0)が必要
  Worksheets("抽出").Range("E2:E" & .Cells(.Cells.Rows.Count, 1).End(xlUp).Row).Offset(1, 0).ClearContents 'ClearContents 値のみクリア

 End With
'あいまい検索の為に、作業列に*つけてタイトル結合
  Dim endRow_F As Long

endRow_F = Cells(Rows.Count, "F").End(xlUp).Row

For i = 2 To endRow_F
 
    Cells(i, "E").Value = "*" + Cells(i, "F").Value + "*"
Next i

'検索 抽出

Dim cnt_code As Integer
  
Sheets("抽出").Select
'エクセルのJ1に設定してあるコードのカウント数を取得
   cnt_code = Range("J1").Value - 1
  
     Dim code() As String
     Dim fRng As Range
'動的配列の個数をここで設定
 
  If cnt_code >= 0 Then
   ReDim code(cnt_code)
   End If
  
   
   For i = 0 To cnt_code '抽出isbn
         code(i) = Range("E2").Offset(i, 0).Value '*タイトル 配列に格納
   MsgBox "code" & i & "=" & code(i)
   Next i
 
Sheets("漫画").Select
 
If cnt_code >= 0 Then
  Range("A1:L1").AutoFilter field:=12, Criteria1:=code, Operator:=xlFilterValues
End If
End Sub
・ツリー全体表示

【78534】Re:インプットボックスを使用した日付入力
お礼  マクロ初心者  - 16/11/1(火) 15:35 -

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


ループの中に入れてしまっていたんですね…
お恥ずかしい限りです…

無事望む形になりました!
ありがとうございました!
・ツリー全体表示

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