Excel VBA質問箱 IV

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

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


1 / 3764 ページ 前へ→

【80922】Re:グラフ書式の統一
発言[NEW]  マナ  - 19/6/20(木) 22:50 -

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

そのグラフは、エラーバーを使用していますか?
こんなのがりました。
ht tps://www.reddit.com/r/excel/comments/7txu9k/excel_crashes_after_but_not_while_running_macro/
・ツリー全体表示

【80921】Re:グラフ書式の統一
発言[NEW]  マナ  - 19/6/20(木) 21:15 -

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

試してみましたが、再現しません。
コードも、自分自身にまで、処理しているのは無駄な気がしますが、
特に問題なさそうです。
・ツリー全体表示

【80920】グラフ書式の統一
質問[NEW]  しょしんしゃ  - 19/6/20(木) 19:32 -

引用なし
パスワード
   マクロ初心者です。
ActiveChartの書式をActiveSheet内の全グラフに反映させる
マクロを作成いたしましたが、
マクロ処理完了後、Excelの動作が停止してしまいます。

VBAのフローに不備がございましたら、教えていただければ幸いです。

【使用PCスペック】
OS:windows10
CPU:Core(TM)i3-6100U CPU @2.30GHz
RAM:4GB

【VBA内容】
縦軸と横軸の最大最小値、目盛りの間隔は元の状態を維持したい為、

1.ActiveChartのコピー
2.For文開始
3.各グラフの残したい縦横軸の設定値を変数に格納
4.各グラフにActiveChartの書式をコピー
5.各グラフに変数に格納した縦横軸設定値を反映
6.For文終了

といった処理を行っています。 

【処理結果】
・ActiveSheet内のグラフの書式は狙ったとおりに反映される
・各グラフの結果を確認する為に、Excelをいじっていると
 10秒程度たった後に動作が停止する


【VBA】
----------------------------------------
Sub グラフ書式の統一()

Dim objChart As Object
Dim x_MinScale As Single
Dim x_MaxScale As Single
Dim y_MinScale As Single
Dim y_MaxScale As Single
Dim x_MjrUnit As Single
Dim y_MjrUnit As Single


On Error GoTo ErrorHandler


If ActiveChart Is Nothing Then
  MsgBox "基準となるグラフを選択した状態で実行してください"
  Exit Sub
End If

'基準となるグラフのコピー(後に書式を貼り付け)
ActiveChart.ChartArea.Copy


'全てのチャートにおいて、"縦横軸の設定保持⇒基準グラフの書式貼り付け⇒元の縦横軸の設定に戻す"を繰り返す
For Each objChart In ActiveSheet.ChartObjects
  
  
  '貼り付け先のグラフの横軸の設定を取得
  With objChart.Chart.Axes(xlCategory)
    x_MinScale = .MinimumScale
    x_MaxScale = .MaximumScale
    x_MjrUnit = .MajorUnit
    
  End With
  
  '貼り付け先のグラフの縦軸の設定を取得
  With objChart.Chart.Axes(xlValue)
    y_MinScale = .MinimumScale
    y_MaxScale = .MaximumScale
    y_MjrUnit = .MajorUnit
  End With
  
  
  '基準となるグラフの書式を貼り付け
  objChart.Select
  ActiveSheet.PasteSpecial Format:=2
  
  '保持していた元の横軸設定を反映
  With objChart.Chart.Axes(xlCategory)
    .MinimumScale = x_MinScale
    .MaximumScale = x_MaxScale
    .MajorUnit = x_MjrUnit
    
  End With
  
  '保持していた元の縦軸設定を反映
  With objChart.Chart.Axes(xlValue)
    .MinimumScale = y_MinScale
    .MaximumScale = y_MaxScale
    .MajorUnit = y_MjrUnit
  End With


Next

''''''

ErrorHandler:
Exit Sub

'''''''

End Sub
-----------------------------------------------------
・ツリー全体表示

【80919】Re:フォームの読み込みが上手く行きません
お礼[NEW]  サンライズ  - 19/6/20(木) 8:14 -

引用なし
パスワード
   ▼よろずや様
>set は、オブジェクトに対して使います。
>gyo も retu もオブジェクトではないので、set は不要です。

ありがとうございます!
無事、処理が上手くいきました!
・ツリー全体表示

【80918】Re:フォームの読み込みが上手く行きません
回答[NEW]  よろずや  - 19/6/20(木) 7:06 -

引用なし
パスワード
   ▼サンライズ さん:
>Private Sub UserForm_initialize()
>
>  Dim gyo%
>  Dim retu%
>
>  Set gyo = ActiveCell.Row
>  Set retu = Range("金額").Column
>  txt金額.Value = Cells(gyo, retu).Value
>  
>  
>End Sub

set は、オブジェクトに対して使います。
gyo も retu もオブジェクトではないので、set は不要です。
・ツリー全体表示

【80917】フォームの読み込みが上手く行きません
質問[NEW]  サンライズ  - 19/6/20(木) 5:36 -

引用なし
パスワード
   背景
エクセル上で数式の管理から名前付セル"金額"を作成しています。
選択しているセルの行にある"金額"列の
金額が表示され、ユーザフォーム上のテキストボックスで修正を行えるようにしたつもりでした。
類似のユーザフォームを作って他は動いているのですが、
これだけ起動時にエラーが出ます。
何故かわからないでしょうか?


Private Sub UserForm_initialize()

  Dim gyo%
  Dim retu%

  Set gyo = ActiveCell.Row
  Set retu = Range("金額").Column
  txt金額.Value = Cells(gyo, retu).Value
  
  
End Sub
・ツリー全体表示

【80916】Re:SUMPRODUCT関数をVBAに書き起こす
お礼  猫の下僕  - 19/6/18(火) 17:38 -

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

(1)を(2)にしたところ結果を得られました。

(1)Cells(i, "J") = Application.Evaluate("SumProduct(((J38:CE68) = (F" & i & ").Value) * ((J5:CE35) = ""T"") * (J1:CE1))")

(2)Cells(i, "J") = Application.Evaluate("SumProduct(((J38:CE68) = (F" & i & ")) * ((J5:CE35) = ""T"") * (J1:CE1))")
・ツリー全体表示

【80915】Re:SUMPRODUCT関数をVBAに書き起こす
発言  Jaka  - 19/6/18(火) 16:59 -

引用なし
パスワード
   >Cells(i, "J") = Application.Evaluate("SumProduct(((J38:CE68) = (F" & i & ").Value) * ((J5:CE35) = ""T"") * (J1:CE1))")

まず、セルなどに書き込んで数式が合っているのか自分で確認しましょう。

Range("A1").Value = "SumProduct(((J38:CE68) = (F" & i & ").Value) * ((J5:CE35) = ""T"") * (J1:CE1))"
・ツリー全体表示

【80914】SUMPRODUCT関数をVBAに書き起こす
質問  猫の下僕  - 19/6/18(火) 16:10 -

引用なし
パスワード
   お世話になります。
SUMPRODUCT関数をVBAに書き起こしたいです。

(1)の関数では結果が得られましたが
(2)のコードでは該当セルが#VALUE!となります。
ヒントをお教えください。

(1)関数 セルJ122に記載
=SUMPRODUCT(($J$38:$CE$68=$F122)*($J$5:$CE$35="T")*($J$1:$CE$1))

(2)VBA
Dim i
i = myRange.Row

Cells(i, "J") = Application.Evaluate("SumProduct(((J38:CE68) = (F" & i & ").Value) * ((J5:CE35) = ""T"") * (J1:CE1))")
・ツリー全体表示

【80913】Re:時刻の表示を修正する。
発言  zzz  - 19/6/18(火) 10:16 -

引用なし
パスワード
   もっと情報を提供した方がいいのではないでしょうか

>あるシステムで出力した時刻が、通常は、例えば19時半20秒だと19:30:20
>と表示されますが、24時を超え、翌深夜0時半などだと24:00:30:00という風に表示されます。


通常時間を出力するくらいなら日付も同時に出されているのでは?

日をまたいで時間表示をするなら日付はどう出力されているのか?

テレビラジオの番組なら午前5時を区切りに0時過ぎを

25時 26時 27時と表示するみたいだし

タイムコードなら同様の表示になるみたいだし

映像関係のデータかと思います。


>通常は、例えば19時半20秒だと19:30:20と表示されますが、
>24時を超え、翌深夜0時半などだと24:00:30:00という風に表示されます。

0時前は 19:30:20 で
0時後は 24:00:30:00 になるのですか? 不自然ですね


出力されたデータはどのような形式なのでしょうか

 CSV  TEXT その他?

エクセルもあり得るけど
そうなるとそのセルは文字列ですよね

回答ではないですが考える上で不明点が多いので
・ツリー全体表示

【80912】Re:時刻の表示を修正する。
発言  γ  - 19/6/17(月) 22:40 -

引用なし
パスワード
   1.数式バーにはどのようなものが表示されていますか?
2.そのセルの表示形式はどうなっていますか?
  文字列なんですか?
  それとも別のなにかですか?
・ツリー全体表示

【80911】Re:時刻の表示を修正する。
発言  マナ  - 19/6/17(月) 18:16 -

引用なし
パスワード
   ▼AAA さん:
>例えばleft関数を使うと、0.75など、何故か小数点の数字が出て上手くいきません

Sub test()
  Dim s As String
  
  s = "24:00:30:00"   'ActiveCell.Text
  MsgBox Left(s, 2) & Right(s, 6)
  
End Sub
・ツリー全体表示

【80910】Re:時刻の表示を修正する。
発言  AAA  - 19/6/17(月) 9:22 -

引用なし
パスワード
   ▼γ さん:
はい、24:00:30:00と、1つ:のカタマリが多く表示さらます
>>24:00:30:00という風に表示されます。
>24:30:00 じゃなくてですか?
>
>表示書式が [h]:mm:ss
>となっていたら、
>hh:mm:ss
>に変更すればよいとか?
・ツリー全体表示

【80909】Re:時刻の表示を修正する。
質問  AAA  - 19/6/17(月) 9:21 -

引用なし
パスワード
   例えばleft関数を使うと、0.75など、何故か小数点の数字が出て上手くいきません

▼マナ さん:
>▼AAA さん:
>
>Right関数で、8文字を切り出してはどうでしょうか。
>
>もしくは
>
>Left関数で2文字と、Right関数で6文字を切り出し、連結する。
・ツリー全体表示

【80908】Re:時刻の表示を修正する。
発言  γ  - 19/6/16(日) 22:53 -

引用なし
パスワード
   >24:00:30:00という風に表示されます。
24:30:00 じゃなくてですか?

表示書式が [h]:mm:ss
となっていたら、
hh:mm:ss
に変更すればよいとか?
・ツリー全体表示

【80907】Re:時刻の表示を修正する。
発言  マナ  - 19/6/16(日) 20:50 -

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

Right関数で、8文字を切り出してはどうでしょうか。

もしくは

Left関数で2文字と、Right関数で6文字を切り出し、連結する。
・ツリー全体表示

【80906】Re:VBAシューティングゲームの弾発射につ...
お礼  SHUN  - 19/6/16(日) 20:15 -

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

コレクションとかfor eachとか、実は今一つ分かっていないので、おそらく根本的に基礎力が足りてないのですね。
修行して出直してきます。
・ツリー全体表示

【80905】時刻の表示を修正する。
質問  AAA  - 19/6/16(日) 20:01 -

引用なし
パスワード
   vba初心者です。
あるシステムで出力した時刻が、通常は、例えば19時半20秒だと19:30:20
と表示されますが、24時を超え、翌深夜0時半などだと24:00:30:00という風に表示されます。
これを自動で翌日付けの00:30:00という風に修正したいのですが、どうすればよいでしょうか??

Len関数などを駆使してみましたが、なぜかよくわからない値になったりして上手くいきません。
・ツリー全体表示

【80904】Re:VBAシューティングゲームの弾発射につ...
回答  亀マスター  - 19/6/15(土) 21:21 -

引用なし
パスワード
   >弾が自機の場所に関わらず同じ場所しか出ない
>スペースキーを押している間、大量の色指定のない小さな円が生成される

いずれも弾にcircle1という名前を付けて、それをもってコントロールしようとしているせいだと思われます。
スペースキーを押している間、
ActiveSheet.Shapes.AddShape(msoShapeOval, p3, p4, s3, s4).Name = "circle1"
で新しい弾を生成し続けますが、それ以降に
ActiveSheet.Shapes("circle1")
を使って参照するのは、最初に生成したcircle1だけなので、それ以降に色の設定をされない弾が生成される上、それらは移動しないということになるのでしょう。


>途中で止まる

これは
If crc1.Top < 100 Then
  crc1.Delete
End If
でそのように設定してるからではないですか?


対応方法ですが、弾を生成するたびにコレクションに追加し、弾の移動はFor Eachで回すようにすればいいでしょう。
最初に弾に色を付けるときだけは、コレクションの最大番号を取得して、それで指定するとか、コレクションに追加するときにキーを設定してそれで指定するとか。


あと、質問とは関係ないですが、インデントが揃ってないので非常に読みにくいです。階層構造に応じたインデントを設定するようにしましょう。
p1とかp2とかの変数名が何のことを指しているのかわかりにくいのも課題ですね。
・ツリー全体表示

【80903】Re:指定した1行の中で任意のセルの左側...
お礼  猫の下僕  - 19/6/14(金) 14:16 -

引用なし
パスワード
   ピンク様、マナ様
ありがとうございました。
・ツリー全体表示

1 / 3764 ページ 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free