Excel VBA質問箱 IV

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

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


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

【77157】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/5/28(木) 14:05 -

引用なし
パスワード
   ▼β さん:
サンプルコード有難うございます。
仕組みが分かりました。


ごめんなさい、追加で質問なのですが、
一番初めに引っかかったところだけエラーを出すようにしたいのですが・・・

例1)
Sheet1
A列
もも
りんご
いちご
ぶどう
みかん

Sheet2
A列  B列
ぶどう 紫
めろん 緑
かき オレンジ

結果:緑

例2)
Sheet1
もも
りんご
いちご
ぶどう
みかん

Sheet2
いちご 赤
ぶどう 紫
かき オレンジ
れもん 黄色

結果:オレンジ

という風な感じなのですが・・・
調べるところで繰り返し処理にしなければ上手くいくのかな、と最初思ったのですが・・・
上手くコードがつながっていないようでダメでした。

>▼あや さん:
>
>追加でもう一つ確認材料の補足を。
>
>アップしたサンプルコードをステップ実行してみてください。
>その流れの中で変数 v は以下のように変化していきます。
>□は配列の要素、中身はからっぽ。■は、配列の要素、中身に値が格納済み。
>
>最初 ただのVariant型変数(配列ではない)
>
>Redim v(1 to 1)           □   要素が1つだけ。
>v(Ubound(v)) = "ABC" & i       ■   値として ABC1 が格納される。
>Redim Preserve v(1 to UBound(v)+1)  ■□  空っぽの要素が1つ追加され要素数としては 2 になる。
>v(Ubound(v)) = "ABC" & i       ■■  最大要素(2番目)の値として ABC2 が格納される。
>Redim Preserve v(1 to UBound(v)+1)  ■■□ 空っぽの要素が1つ追加され要素数としては 3 になる。
>v(Ubound(v)) = "ABC" & i       ■■■ 最大要素(3番目)の値として ABC3 が格納される。
・ツリー全体表示

【77156】Re:条件付き書式で色づけしたセルをカウ...
発言  独覚  - 15/5/28(木) 10:59 -

引用なし
パスワード
   ▼ゆか さん:
ちなみに
>      If W_Range.DisplayFormat.Interior.ColorIndex = 3 Then
の「DisplayFormat」を外して

>      If W_Range.Interior.ColorIndex = 3 Then
とすると条件付き書式で赤くなっているものは無視して手で赤くしたものだけ数えます。
・ツリー全体表示

【77155】Re:条件付き書式で色づけしたセルをカウ...
回答  独覚  - 15/5/28(木) 10:51 -

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

.Colorではなく.ColorIndexですが。

Sub R_COUNT()
  Dim W_Range   As Range
  Dim C_Cnt    As Integer
  Dim O_Range   As Range
  
  With Worksheets("Sheet1")
    C_Cnt = 0
    .Columns("AH").Clear
    Set O_Range = .Range("AH1")
  
    For Each W_Range In .Range("E6:K11")
      If W_Range.DisplayFormat.Interior.ColorIndex = 3 Then
        C_Cnt = C_Cnt + 1
        O_Range.Value = W_Range.Value
        Set O_Range = O_Range.Offset(1)
      End If
    Next
    .Range("E41").Value = C_Cnt
  End With
End Sub

上記マクロを標準モジュールに入れて実行してみてください。
E41セルに赤いセルの個数、AH列に赤いセルの内容が表示されます。
・ツリー全体表示

【77154】Re:条件付き書式で色づけしたセルをカウ...
質問  ゆか  - 15/5/28(木) 9:34 -

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

返信下さり、ありがとうございます。

現状では、他で赤になっているセルはありません。

.DisplayFormat.Interior.Colorなんですが、
インターネットで調べてもいまいちよくわかりませんでした…。

是非ご教授いただければありがたいです。
宜しくお願いいたします。
・ツリー全体表示

【77153】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/5/27(水) 22:49 -

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

追加でもう一つ確認材料の補足を。

アップしたサンプルコードをステップ実行してみてください。
その流れの中で変数 v は以下のように変化していきます。
□は配列の要素、中身はからっぽ。■は、配列の要素、中身に値が格納済み。

最初 ただのVariant型変数(配列ではない)

Redim v(1 to 1)           □   要素が1つだけ。
v(Ubound(v)) = "ABC" & i       ■   値として ABC1 が格納される。
Redim Preserve v(1 to UBound(v)+1)  ■□  空っぽの要素が1つ追加され要素数としては 2 になる。
v(Ubound(v)) = "ABC" & i       ■■  最大要素(2番目)の値として ABC2 が格納される。
Redim Preserve v(1 to UBound(v)+1)  ■■□ 空っぽの要素が1つ追加され要素数としては 3 になる。
v(Ubound(v)) = "ABC" & i       ■■■ 最大要素(3番目)の値として ABC3 が格納される。 
・ツリー全体表示

【77152】Re:一覧から参照
発言  γ  - 15/5/27(水) 22:03 -

引用なし
パスワード
   こんにちは。
changeイベントプロシージャを利用してもよいですが、
VLOOKUPを使った計算式を利用するのではダメなんですか?
比較的よく使われる関数だと思います。
・ツリー全体表示

【77151】Re:列を表示非表示にする
お礼  レナレナ  - 15/5/27(水) 11:57 -

引用なし
パスワード
   ありがとうございました。
perfectでした。

>Dim wRow    As Integer
これ↑はずしても動きました。
ご指導ありがとうございました。
・ツリー全体表示

【77150】Re:列を表示非表示にする
回答  独覚  - 15/5/27(水) 11:01 -

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

Sub 先頭空白列非表示()
  Dim wRow    As Integer
  Dim W_Range   As Range
  Application.ScreenUpdating = False
  '1〜4行目を非表示
   Rows("1:4").Hidden = True
  'C〜D列を非表示
   Columns("A:D").Hidden = True
  
   For Each W_Range In Range("E4:GS4")
    With W_Range
      Select Case .Value
          Case 1: .Columns.Hidden = True
          Case 0: .Columns.Hidden = False
      End Select
    End With
  Next
  Application.ScreenUpdating = True
End Sub

ではどうでしょうか?
>  Dim wRow    As Integer
は何に使うのかわからないので残しています。
また、列の非表示の画面の動きを隠すために
>  Application.ScreenUpdating = False
を入れています。
・ツリー全体表示

【77149】列を表示非表示にする
質問  レナレナ  - 15/5/27(水) 9:48 -

引用なし
パスワード
   4行目のセルに1または0を入力しています。
(列はGS列まで使用しています)
セル値1であればその列を非表示、セル値0であればその列を表示というように
表示非表示のフラグを4行目に入れています。
行のセル値を見て列を表示非表示できるマクロを教えてください。

これを次のマクロに追加したいのですが…。
よろしくお願いいたします。

Sub 先頭空白列非表示()
  Dim wRow  As Integer
  '1〜4行目を非表示
  Rows("1:4").Hidden = True
  'C〜D列を非表示
  Columns("A:D").Hidden = True
End Sub
・ツリー全体表示

【77148】Re:条件付き書式で色づけしたセルをカウ...
発言  独覚  - 15/5/27(水) 9:45 -

引用なし
パスワード
   ▼ゆか さん:
>この条件の結果赤になっている物だけをE41でカウントしたいのです。
手で赤く塗ったもの、他の条件で赤くなっているものはあるのでしょうか?
もしあった場合、それは数えないのでしょうか?

単純に赤いセルを判断するのであれば
対象セル.DisplayFormat.Interior.Color
が使えないでしょうか?

DisplayFormatプロパティは2010から追加された物ですが通常の表示形式・条件付き書式を
問わず、その時点でのセルの状態を返します。
・ツリー全体表示

【77147】条件付き書式で色づけしたセルをカウント
質問  ゆか  - 15/5/26(火) 21:37 -

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

Excel2010を使用しています。
A列には、名前を祝日として名前を付け、
A1には祝日、A2以降には日付(yyyy/m/d)が入っています。

それ以外は下記の様に、入っています。

4行目
E4…年(#"年")
G4…月(#"年")
L4…=DATE(E4,G4,1)

6行目
E6…=L4-WEEKDAY(L4)+1
F6…=E6+1

K6==J6+1

7行目
E7…=E7+1
F7…=E7+1

K7==J7+1

上記が11行目まで続いています。

これらに下記の条件付き書式を設定しています。

範囲 =$E$6:$K$11
優先順位1. 数式 =MONTH(E6)<>$G$4 
      セルの色 白、背景1
      フォントの色 白、背景1、黒+基本色5%
優先順位2. 数式  =COUNTIF(祝日,E6)>0
      セルの色 赤

この条件の結果赤になっている物だけをE41でカウントしたいのです。

また、逆に$E$6:$K$11範囲内で赤塗ったセルの年月日
もしくは
条件付きで赤く染まった年月日をAHに表示させたいです。

出来るかどうかもわからない質問をさせていただいて申し訳ありませんが、
ご回答いただければ幸いです。宜しくお願いいたします。
・ツリー全体表示

【77146】一覧から参照
質問  ☆Nonoka☆  - 15/5/26(火) 16:18 -

引用なし
パスワード
   いつもお世話になります。
教えてください。
コスト表を作成しています。
sheet2のB列4行目から下に銘柄、C列4行目から下に値段の一覧表があります。
これは銘柄が増えていきます。
sheet1のK列3行目から下に銘柄を入力します。
入力された銘柄とsheet2のB列の銘柄が同じものがあればその横のセルC列の値段をsheetL列に表示させたいです。

簡単に言いますとsheet2の一覧から値段を拾って来たいです。
sheet1のK列に入れた途端にとなりのL列に値段が出るようにしたいです。
宜しくお願い申し上げます。
・ツリー全体表示

【77145】Re:シート1とシート2の内容で一致するも...
発言  β  - 15/5/26(火) 12:04 -

引用なし
パスワード
   ▼あや さん:
>▼β さん:
>なんとなーくはわかるのですが・・・
>勉強不足で申し訳ありません・・・
>もう少し噛み砕いていただけるとありがたいです・・・

今から2日間ほど、外出しますので、次のレスは、しばらくできません。
説明は難しいですね。
以下にサンプルコードをアップします。
実行してみて、そのあと、コード内のコメントを読んでみてください。

Sub Sample()
  Dim v As Variant  '格納する要素数が不定なので、とりあえずVariant型で。
  Dim i As Long
  
  '今から3つの要素を配列にいれます。
  
  For i = 1 To 3
    If IsArray(v) Then   '2回目以降は配列になっています
      ReDim Preserve v(1 To UBound(v) + 1)
        '2回目なら、配列の要素数は 1。そこに最初の値が格納済み。
        'UBoundが1ですね。ここに2つめの要素を格納したいので
        'もう1つ、要素が入る箱を準備します。
        'Ubound(v) つまり 1 に 1 を足した 2番目の箱を追加しています。
        '3回目なら、配列の要素数は 2。そこに、最初と2番目の要素が格納済み。
        'なので、要素番号 3 の箱を準備します。
        'UBound(v) つまり 2 に 1 を足した 3番目の箱が準備されます。
      
    Else          '最初は配列ではありませんね。
      ReDim v(1 To 1)   'なので、要素数が1つだけの配列に初期化します。
                'LBound(配列)は配列内の最初の要素番号
                'UBound(配列)は配列内の最後の要素番号
                'ここでの初期化された配列の最後の要素番号は 1 です。
    End If
    
    'ここでは、すでに、新しい要素が入るための箱が追加されています。
    'その要素番号が、この配列の最後の箱の番号。つまり、現時点の UB0ound(v) です。
    
    v(UBound(v)) = "ABC" & i  'その最後の箱に要素を格納します。
  Next
  
  '最初は配列ではなくVariant型の変数でしたが、ここでは要素数が3つあり、そこに
  '値が入った配列になっています。
  
  MsgBox UBound(v)
  MsgBox v(1) & vbLf & v(2) & vbLf & v(3)
    
End Sub
・ツリー全体表示

【77144】Re:シート1とシート2の内容で一致するも...
質問  あや  - 15/5/26(火) 10:11 -

引用なし
パスワード
   ▼β さん:
なんとなーくはわかるのですが・・・
勉強不足で申し訳ありません・・・
もう少し噛み砕いていただけるとありがたいです・・・

>▼あや さん:
>
>多分わからないのは
>
>If f Is Nothing Then
>
>  If IsArray(vntA) Then
>    ReDim Preserve vntA(1 To UBound(vntA) + 1)
>    ReDim Preserve vntB(1 To UBound(vntB) + 1)
>  Else
>    ReDim vntA(1 To 1)
>    ReDim vntB(1 To 1)
>  End If
>
>  vntA(UBound(vntA)) = c.Value
>  vntB(UBound(vntB)) = c.Offset(, 1).Value
>
>End If
>
>ここですね。
>
>配列にアンマッチのセルの情報を格納していくのですが、何個あるかわからないので
>最初は Dim vntA As Variant といったように、配列ではなく、Variant型の変数として定義します。
>
>で、データを格納する際、最初は、vntAやvntBは配列ではないので
>IsArray(vntA) これは、配列なのかどうかの判定ですが、それがFalse。
>なので、Else で
>    ReDim vntA(1 To 1)
>    ReDim vntB(1 To 1)
>こうして、それぞれ、要素が1つだけの配列をまず生成します。
>一方、2つめ以降は、IsArray(vntA) が True なので
>    ReDim Preserve vntA(1 To UBound(vntA) + 1)
>    ReDim Preserve vntB(1 To UBound(vntB) + 1)
>
>これは 配列に今まではいっているものはそのままにして(Preserve) 配列を
>指定された大きさにかえなさいというコードです。
>で、UBound(vntA) は、その時点での要素数です。それに 1 を加えた数、つまり
>今から格納しようとする値がはいる要素を1つ追加します。
>
>で、
>
>  vntA(UBound(vntA)) = c.Value
>  vntB(UBound(vntB)) = c.Offset(, 1).Value
>
>この時点では UBound は追加分が加えられた最終要素番号になっていますので
>そこに、c.Value(A列の値)や c.Offset(,1).Value(B列の値)を格納します。
・ツリー全体表示

【77143】Re:階層構造のステータスの設定に関して
お礼  imori  - 15/5/23(土) 23:28 -

引用なし
パスワード
   ▼ウッシ さん:
こんばんは。

ソースコードを書いていただきありがとうございます。
まだ現在読み解いている最中ではあるのですが、動かしてみました。
ビジュアル的に動きが分かりやすく、こういうやり方もあるのかと感動しました。
まだ、ソースを理解するには至っていないので、
読み解けましたら、またご連絡いたします。
・ツリー全体表示

【77142】Re:階層構造のステータスの設定に関して
お礼  imori  - 15/5/23(土) 22:12 -

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

imoriです。
ソースコードを読み解いていたらお返事遅くなってしまいました。
まだ過去のソースコードを読み解いている最中なのですが・・・。

新しいソースコードありがとうございます。
まだ、理解する段階まではいってないのですが、
期待する通りの結果に動いており、感動しています。
手でやったほうが早いのではないかと諦めかけていましたので・・・・。
本当にありがとうございます。とても勉強になります。
これからもう少しソースコードを読み解いてみたいと思います。
・ツリー全体表示

【77141】Re:コンボボックスから時刻指定でアプリ...
お礼  きよ  - 15/5/23(土) 15:07 -

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

PCの再起動から、ファイルの作り直し、で無事に解決しました。
前のファイルでは標準モジュールにfirefoxを移動しても動かない状態です。

この度は、色々と有り難うございました。
今後とも、宜しくお願い致します。
・ツリー全体表示

【77140】Re:コンボボックスから時刻指定でアプリ...
お礼  きよ  - 15/5/23(土) 15:06 -

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

PCの再起動から、ファイルの作り直し、で無事に解決しました。
前のファイルでは標準モジュールにfirefoxを移動しても動かない状態です。

この度は、色々と有り難うございました。
今後とも、宜しくお願い致します。
・ツリー全体表示

【77139】Re:コンボボックスから時刻指定でアプリ...
お礼  きよ  - 15/5/23(土) 15:04 -

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

UserFormにコンボボックスを配置しオブジェクト名を指定するのに多少時間がかかっただけで、コードは、昨晩(今朝)にVBA研究所にアップした物を、サイトからそっくりそのままコピーしました。
●結果は、γさんのおっしゃる通りに無事に動きました。

早速、test.xlsmというファイル名を付けて保存しました。

ところが、先ほどまで使っていた(前の)ファイルを開いて標準モジュールにFirefoxをコピーしても動きません。
すごく、とても、不思議な現象です。
(一般的に言うと、ファイルの一部が壊れているというのでしょうけど)
他に、記述したコード/UserForm内のコンロトール、を作り直したいと思います。
その昔、Lotus1-2-3のR2.2Jでマクロで計算させると、再計算が出来ないという不具合があったのを思い出しました。
また、PaintShopPro Ver6で保存ファイル名の中に「10」という数字があると保存できないというバグに遭遇したこともありました。

これを機会にExcel2007のアップデートをしてみたいと思っています。
お手数をおかけ致しましたことをお詫びすると共に、どうも有り難うございました。

ちなみに、γさんが「あなたから何のコメントが無いので」という部分ですが、自分としては本日の12:24の書き込みで、皆さんに、コメントしたつもりでいました、すみませんでした。

色々と有り難うございました、今後とも宜しくお願い致します。

PS
今度は、「ERROR:本文に禁止語句が含まれています。」のエラーで投稿が遅くなりまして申し訳ございません。
・ツリー全体表示

【77138】Re:コンボボックスから時刻指定でアプリ...
発言  γ  - 15/5/23(土) 14:27 -

引用なし
パスワード
        ↑ に指定しても
の矢印の位置がずれていますが、了解願います。
・ツリー全体表示

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