Excel VBA質問箱 IV

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

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


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

【75195】Re:オートフィルタ後にコピー、集計
発言  HARA  - 14/1/6(月) 7:15 -

引用なし
パスワード
   bookを保護させておけばよいのでは?
・ツリー全体表示

【75194】オートフィルタ後にコピー、集計
質問  まなか  - 14/1/6(月) 2:26 -

引用なし
パスワード
   下記の内容のマクロに関して、
ぜひ教えてください。
説明がうまくなかったらごめんなさい。

A列からK列までの表があります。
行数は200前後。
一行目項目行。
その表のI列でフィルタし、1であれば抽出し、
別シート"A"にコピーするというマクロを作りたいと思っています。

私のしたいことは、
IJK列の最終行のセルに合計を出すようにしたい。
AからH列は選択範囲内で中央ぞろえし、合計と中央ぞろえで
入力がしたい。
最後にマクロが終了した際は結果が表示されているシート、つまり
Aシートで終了したい。
Aシートがなんらかのアクシデントで削除されてしまった場合に
メッセージボックスで確認し、作成しますか?YESでシートを新規作成するということはできますでしょうか?
わたしの幼稚な下記のマクロを改善し、進化させるようご指導いただけますでしょうか?
よろしくお願いします。


Sub 集計()
  With Sheets("送付リスト").Range("A1")
    .AutoFilter Field:=9, Criteria1:="1"
    .CurrentRegion.Copy Sheets("A").Range("A1")
     Columns("A:K").EntireColumn.AutoFit
  End With
 With Sheets("送付リスト")
  If .AutoFilterMode = True Then
    .AutoFilterMode = False
  End If
 End With
 MsgBox "ソート完了"
End Sub
・ツリー全体表示

【75193】Re:2つのセル入力で処理実行するには?
発言    - 14/1/4(土) 18:37 -

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

>"D1:K1" の場合は連続セルになってしまうので、どうしたら良いか分かりませんでしたが
そういうときはマクロの記録です。
どこかテキトーなセルをクリックして選択、さらにCtrlキーを押さえて
さっきとは別のテキトーなセルをクリック。これでセルが2つ選択できます。

記録されたマクロがこちらです。
Sub Macro1()
  Range("C5,D9").Select '←これが使えます
  Range("D9").Activate  'この行は無視
End Sub
・ツリー全体表示

【75192】Re:2つのセル入力で処理実行するには?
お礼  とし爺  - 14/1/4(土) 18:15 -

引用なし
パスワード
   γ 様

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

"D1:K1" の場合は連続セルになってしまうので、どうしたら良いか分かりませんでしたが、カンマ区切りとは気づきませんでした。
・ツリー全体表示

【75191】Re:2つのセル入力で処理実行するには?
発言  γ  - 14/1/4(土) 14:06 -

引用なし
パスワード
   変更するセルが必ず一つと決まっているなら、
Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("D1,K1")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
   '本処理
  Application.EnableEvents = True
End Sub
上記でどうでしょうか。
・ツリー全体表示

【75190】2つのセル入力で処理実行するには?
質問  とし爺  - 14/1/4(土) 13:05 -

引用なし
パスワード
   ひとつのセル(D1)の場合は下記コードですが

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Range("D1")) Is Nothing Then Exit Sub
  Application.EnableEvents = False
   '処理
  Application.EnableEvents = True
End Sub

例えば、D1セルとK1セルのどちらかに入力があった場合に処理実行
させるにはどう書けば良いのでしょうか?
・ツリー全体表示

【75189】Re:無限ループ?について
お礼  でめ E-MAIL  - 13/12/29(日) 18:03 -

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

Application.EnableEvents = False
を最初に実行してその後の処理を実行させたところ
所期の結果を得ることができました。

問題解決です。
ありがとうございました。
・ツリー全体表示

【75188】Re:無限ループ?について
お礼  でめ E-MAIL  - 13/12/29(日) 17:44 -

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

>[H11]セルが変われば、また Changeイベントが発生します。
>場合により、Changeイベントの連鎖反応が起きます。
イベントで書き換えた場合も新たなイベントが発生しているということですね。
一行だけの時はすんなりできていたので思いも及びませんでした。

わかりました。
イベントの抑止方法も含めて改めて勉強してみます。
今後ともよろしくお願いします。
・ツリー全体表示

【75187】Re:無限ループ?について
発言  kanabun  - 13/12/29(日) 17:23 -

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

>コメントアウトをはずすと無限ループに入ったような挙動を起こします。

たとえば、[G11]セルが変化したら、
>      Range("H11").Value = Range("g11").Value
[H11]セルを書き換えてますね?
[H11]セルが変われば、また Changeイベントが発生します。
場合により、Changeイベントの連鎖反応が起きます。

Changeイベントのなかで、セルを書き換えるときは、イベントを抑止して
おきましょう

>Private Sub Worksheet_Change(ByVal Target As Range)

  Application.EnableEvents = False
  Select Case Target.Address(0,0)
    Case "G11"
      Range("H11").Value = Target.Value
    Case "G12"
      Range("H12").Value = Target.Value
    Case "G16"
      Range("G17").Value = Target.Value
      Range("G23").Value = Target.Value
      Range("G24").Value = Target.Value
  End Select
  Application.EnableEvents = True

>End Sub
・ツリー全体表示

【75186】無限ループ?について
質問  でめ E-MAIL  - 13/12/29(日) 16:48 -

引用なし
パスワード
   ご教授お願いします。エクセル2003です。

下記のようなワークシートのチェンジイベントで、今は正常に動いています。
ところが、コメントアウトをはずすと無限ループに入ったような挙動を起こします。
データは2カ所あるいは3カ所に正常に複写されています。
何が原因か教えていただければと思います。
よろしくお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim セル As String
  
  セル = ActiveWindow.ActiveCell.Address
  Select Case セル
    Case "$G$11"
      Range("H11").Value = Range("g11").Value
    Case "$G$12"
      Range("h12").Value = Range("g12").Value
    Case "$G$16"
      Range("g17").Value = Range("g16").Value
'      Range("g23").Value = Range("g16").Value
'      Range("g24").Value = Range("g16").Value
  End Select
End Sub
・ツリー全体表示

【75185】Re:余談ですが・・・
お礼  しずか  - 13/12/27(金) 15:11 -

引用なし
パスワード
   ウッシ さん

見・た・目(@@;)?!

あまりにも、びっくりしすぎて
思わず顔文字を使ってしまうくらい、びっくりしました。

そういうものなのですね。

また一つ勉強になりました。
この度は、本当にありがとうございました。
・ツリー全体表示

【75184】Re:余談ですが・・・
回答  ウッシ  - 13/12/27(金) 14:17 -

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

こんにちは

ズームではなくて列幅を狭くして「####」のような表示になっていませんか?

Find はTextプロパティで検索しているようなので見た目が検索値通りになって
いないとエラーになります。

マクロに検索前にズームアップ(or 列幅調整)、検索後にズームダウン
とか入れてみてはどうですか?


>完全に余談ですが・・・
>
>何故か表示画面をズームで小さくすると、エラーになります。
>ズームで大きくすると、通常通り動きます。
>
>そういうものなのでしょうか?
・ツリー全体表示

【75183】余談ですが・・・
発言  しずか  - 13/12/27(金) 13:58 -

引用なし
パスワード
   完全に余談ですが・・・

何故か表示画面をズームで小さくすると、エラーになります。
ズームで大きくすると、通常通り動きます。

そういうものなのでしょうか?
・ツリー全体表示

【75182】Re:VLOOKUPのセルを含むとエラーが出ます...
お礼  しずか  - 13/12/27(金) 13:02 -

引用なし
パスワード
   ウッシさん

そういうことだったのですね。
大変勉強になりました。
本当にありがとうございます。

また、なにか別件でお世話になることもあるかもしれません。
どうぞ、今後もよろしくお願いいたします。

このたびは、お世話になりました。
・ツリー全体表示

【75181】Re:VLOOKUPのセルを含むとエラーが出ます...
回答  ウッシ  - 13/12/27(金) 11:41 -

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

こんにちは

少数は丸め誤差があって取扱に注意が必要なので避けたいです。
今回の件には丸め誤差は関係ないかもしれないですけど・・・

Find で値検索(LookInをxlValues)すると、セルのTextプロパティの内容で検索しているみたいです。
日付の検索なら LookInをxlFormula にすると書式に関係なく検索出来るようですけど、今回の少数の
場合はダメでした。
なので、Maxで見つかった少数点以下7桁の値をセルの書式の少数点以下3桁に直してから検索するように
してみました。
見つかったセルを変数tにセッテして、tに罫線、太字を設定しています。

少数点以下3桁にした状態で最大値のセルが検索範囲に一つしかないという条件です。

Sub てすと()
  Dim m As String
  Dim t As Range
  With Range("A1:I10")
    m = Format(Application.WorksheetFunction.Max(.Cells), "0.000 ") '実際のセルの書式にする
    Set t = .Find(What:=m, LookIn:=xlValues, LookAt:=xlWhole)
  End With
  With t
    .BorderAround Weight:=xlMedium, ColorIndex:=3
    .Font.Bold = True
  End With
End Sub
・ツリー全体表示

【75180】Re:VLOOKUPのセルを含むとエラーが出ます...
お礼  しずか  - 13/12/27(金) 11:03 -

引用なし
パスワード
   ウッシさん


お世話になっております。

出来ました!!
本当にありがとうございます!!


後学のために、どうしてできなかったのかと、
コードの意味を(簡単で構いません。あとは調べます。)
ご教授いただけるとありがたいです。

よろしくお願いいたします。
・ツリー全体表示

【75179】Re:VLOOKUPのセルを含むとエラーが出ます...
回答  ウッシ  - 13/12/27(金) 9:49 -

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

範囲が広いとダメな理由が分からないですけど、

Sub てすと()
  Dim m As String
  Dim t As Range
  With Range("A1:I10")
    m = Format(Application.WorksheetFunction.Max(.Cells), "0.000 ") '実際のセルの書式にする
    Set t = .Find(What:=m, LookIn:=xlValues, LookAt:=xlWhole)
  End With
  With t
    .BorderAround Weight:=xlMedium, ColorIndex:=3
    .Font.Bold = True
  End With
End Sub

のように変更するどうなりますか?


>>ひょっとしてセルの書式設定で表示桁数とかセットしてないですか?
>
>ほとんどが小数題7位まである値なので、
>見栄え上、小数第3位で揃えています。
>
>それかと思い、書式設定を標準にして、条件書式も消して
>やってみたのですが、同じエラーが出てしまいます。
>
>
>-----------------------------
>
>いろいろ試してみたところ、
>もしかするとですが、小数点が多すぎることに問題があるようです。
>
>範囲の大きさにもよるようです。
>範囲が大きいと小数点第1位まで
>小さいと小数点3位まで、実行できたりします。
>
>そういうものなのでしょうか?
>
>お手数おかけして申し訳ありません。
・ツリー全体表示

【75178】Re:VLOOKUPのセルを含むとエラーが出ます...
質問  しずか  - 13/12/26(木) 19:49 -

引用なし
パスワード
   うっしさん

お世話になっております。


>ひょっとしてセルの書式設定で表示桁数とかセットしてないですか?

ほとんどが小数題7位まである値なので、
見栄え上、小数第3位で揃えています。

それかと思い、書式設定を標準にして、条件書式も消して
やってみたのですが、同じエラーが出てしまいます。


-----------------------------

いろいろ試してみたところ、
もしかするとですが、小数点が多すぎることに問題があるようです。

範囲の大きさにもよるようです。
範囲が大きいと小数点第1位まで
小さいと小数点3位まで、実行できたりします。

そういうものなのでしょうか?

お手数おかけして申し訳ありません。
・ツリー全体表示

【75177】Re:VLOOKUPのセルを含むとエラーが出ます...
回答  ウッシ  - 13/12/26(木) 13:35 -

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

こんにちは

本当にそのコードのままですか?
そのエラーは、
Set t = .Find(What:=m, LookIn:=xlValues)
で目的のセルが見つかっていないという事です。

Range("A1:N10")の最大値で、Range("A1:N10")を検索しているので
tがNothingのはずは無いと思います。

ひょっとしてセルの書式設定で表示桁数とかセットしてないですか?


>うっしさん
>お世話になっております。
>
>早速試してみましたが、
>今度は、エラーが出るようになってしまいました。
>
>
>整数ですと、エラーはでません。
>
>何か他に処理をしなければいけないことがあるのでしょうか?
>
>
>エラーは以下のとおりです。
>
>----------------------
>
>実行時エラー 91
>オブジェクト変数またはWithブロック変数が設定されていません。
>
>と、出ます。
>
>----------------------
>デバックを押すと、
>
>.BorderAround Weight:=xlMedium, ColorIndex:=3
>
>のコードに黄色のラインがあります。
>
>----------------------
>
>
>Sub てすと()
>
>  Dim m As Double
>  Dim t As Range
>  With Range("A1:N10")
>    m = Application.WorksheetFunction.Max(.Cells)
>    Set t = .Find(What:=m, LookIn:=xlValues)
>  End With
>  With t
>    .BorderAround Weight:=xlMedium, ColorIndex:=3
>    .Font.Bold = True
>  End With 
>  
>  
>End Sub
・ツリー全体表示

【75176】Re:VLOOKUPのセルを含むとエラーが出ます...
質問  しずか  - 13/12/26(木) 12:54 -

引用なし
パスワード
   うっしさん
お世話になっております。

早速試してみましたが、
今度は、エラーが出るようになってしまいました。


整数ですと、エラーはでません。

何か他に処理をしなければいけないことがあるのでしょうか?


エラーは以下のとおりです。

----------------------

実行時エラー 91
オブジェクト変数またはWithブロック変数が設定されていません。

と、出ます。

----------------------
デバックを押すと、

.BorderAround Weight:=xlMedium, ColorIndex:=3

のコードに黄色のラインがあります。

----------------------


Sub てすと()

  Dim m As Double
  Dim t As Range
  With Range("A1:N10")
    m = Application.WorksheetFunction.Max(.Cells)
    Set t = .Find(What:=m, LookIn:=xlValues)
  End With
  With t
    .BorderAround Weight:=xlMedium, ColorIndex:=3
    .Font.Bold = True
  End With 
  
  
End Sub
・ツリー全体表示

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