Excel VBA質問箱 IV

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

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


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

【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 -

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

【80902】Re:指定した1行の中で任意のセルの左側...
発言  ピンク  - 19/6/14(金) 9:00 -

引用なし
パスワード
   Sub Test()
  MsgBox ActiveCell.End(xlToLeft).Value
End Sub
・ツリー全体表示

【80901】Re:指定した1行の中で任意のセルの左側...
発言  猫の下僕  - 19/6/14(金) 8:27 -

引用なし
パスワード
   マナ さん
ありがとうございます。
必ず空白セルを選択する、という条件です。
左側の範囲に空白セルしかない場合は0(ゼロ)を返したいです。
・ツリー全体表示

【80900】Re:指定した1行の中で任意のセルの左側...
発言  マナ  - 19/6/13(木) 17:38 -

引用なし
パスワード
   ▼猫の下僕 さん:


C4を選択していた場合は?
・ツリー全体表示

【80899】指定した1行の中で任意のセルの左側にあ...
質問  猫の下僕  - 19/6/13(木) 17:26 -

引用なし
パスワード
   お世話になります。
どのように考えれば良いかヒントをお教えください。
たとえば
C4に"A"が入力されていて
M4に"B"が入力されている場合
Q4を選択した場合はM4の値(B),
G4を選択した場合はC4の値(A),
を選択したいです。

範囲は任意の一列です。
列番号も全て任意です。
入力されているも文字も任意です。

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

【80898】VBAシューティングゲームの弾発射について
質問  SHUN  - 19/6/12(水) 21:48 -

引用なし
パスワード
   VBAでゲーム創作についての質問です。

以下のようなプログラムを組み、スペースキーで弾としての小さな円を発射させたいと
思ったのですが、
1.弾が自機の場所に関わらず同じ場所しか出ない、途中で止まる。
2.スペースキーを押している間、大量の色指定のない小さな円が生成される

といった問題点があります。

どのように修正したらよいでしょうか?


Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Integer

Sub 練習()

'初期設定

Dim p1 As Single, p2 As Single, s1 As Single, s2 As Single
Dim p3 As Single, p4 As Single, s3 As Single, s4 As Single

Dim crcx As Object, crc1 As Object

Dim bung As Boolean


p1 = 200
p2 = 200
s1 = 40
s2 = 40


ActiveSheet.Shapes.AddShape(msoShapeOval, p1, p2, s1, s2).Name = "circlex"
With ActiveSheet.Shapes("circlex")
  .Fill.ForeColor.RGB = vbBlue
  .Line.Visible = False
End With

Set crcx = ActiveSheet.Shapes("circlex")

bung = False

'メインループ

Do

'crcxを移動


If GetAsyncKeyState(39) <> 0 Then '右
 
crcx.Left = crcx.Left + 0.5

End If

If GetAsyncKeyState(37) <> 0 Then '左
    
crcx.Left = crcx.Left - 0.5

End If

'Enterキーで強制終了

If GetAsyncKeyState(13) <> 0 Then
 
crcx.Delete


Exit Do
  
End If

'crc1をy方向100まで発射

If GetAsyncKeyState(32) <> 0 Then

bung = True

End If

If bung = True Then

p3 = crcx.Left + 20
p4 = crcx.Top + 20
s3 = 10
s4 = 10

ActiveSheet.Shapes.AddShape(msoShapeOval, p3, p4, s3, s4).Name = "circle1"
With ActiveSheet.Shapes("circle1")
  .Fill.ForeColor.RGB = vbRed
  .Line.Visible = False
End With

Set crc1 = ActiveSheet.Shapes("circle1")

bung = False

crc1.Top = crc1.Top - 10

  If crc1.Top < 100 Then
  
  crc1.Delete
  
  End If

End If


'処理間隔を 0.01 秒に設定
Application.Wait [Now() + "0:00:00.01"]


Loop


End Sub
・ツリー全体表示

【80897】Re:オートシェイプ辺り判定:円と回転す...
お礼  SHUN  - 19/6/12(水) 21:08 -

引用なし
パスワード
   画面には反映させず設定上のみ‐θ回転方法がわからなかったので、この方法ではできませんでしたが、点と直線の距離を使って自力で解決しました。

▼γ さん:
>>円と円は三平方で、円と非回転の長方形は1辺との距離判定でクリアしましたが、
>>回転となるとわからなくなりました。
>長方形の回転角をθとすると、
>長方形の中心を回転中心として、両者をーθ回転すれば、
>回転無しの長方形と円との交点判定に帰着できるはずですが。
・ツリー全体表示

【80896】Re:教えてください
お礼  tomo  - 19/6/8(土) 19:51 -

引用なし
パスワード
   ▼マナ さん:
>▼tomo さん:
>
>意味不明です。
>変数名は関係ないですよ?
>
>数値しか入力する必要がないなら
>Application.InputBoxを使うとよいです。
>と申し上げたつもりでした。
>
>誤解させていましましたか
>使い方は、Jakaさんの回答通りなのですが…
>

非常にvbaに対する知識が乏しく、ご迷惑をおかけしています。
マナさん Jakaさんありがとうございました。
・ツリー全体表示

【80895】Re:教えてください
発言  マナ  - 19/6/8(土) 17:56 -

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

意味不明です。
変数名は関係ないですよ?

数値しか入力する必要がないなら
Application.InputBoxを使うとよいです。
と申し上げたつもりでした。

誤解させていましましたか
使い方は、Jakaさんの回答通りなのですが…

Sub test()
  Dim n As Variant
  
  Do
    n = Application.InputBox("サイズを入力してください", Type:=1)
    If VarType(n) = vbBoolean Then Exit Sub
 
    If n >= 1 And n <= 100 Then Exit Do
    
    MsgBox "入力可能な範囲は1〜100です。"
  Loop
 
  Select Case CInt(n)
    Case 80 To 100
      MsgBox "Bです"
    Case 20 To 79
      MsgBox " Dです。"
    Case 1 To 19
      MsgBox " Fです。"
  End Select

End Sub

  
・ツリー全体表示

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