Excel VBA質問箱 IV

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

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


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

【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

  
・ツリー全体表示

【80894】Re:教えてください
質問  tomo  - 19/6/8(土) 16:45 -

引用なし
パスワード
   ▼マナ さん:
>▼tomo さん:
>
>数値ならApplication.InputBoxを使うとよいです。
>ht tp://officetanaka.net/excel/vba/tips/tips37.htm

早速InputBoxを使い作ってみましたが、コンパイルエラー(7行目)が出てしまいます。何がダメなのでしょうか?


Dim 文字列 As Integer
  文字列 = InputBox("サイズを入力してください")
    If 80 <= 文字列 And 文字列 <= 100 Then
         MsgBox "Bです"
       ElseIf 20 <= 文字列 And 文字列 < 80 Then
           MsgBox " Dです。"
        ElseIf 0 < 文字列And 文字列 < 20 Then
             MsgBox " Fです。"
          ElseIf 文字列 = 0 Then
              MsgBox " 0以外を入力してください。"
           ElseIf 101 <= 文字列 Then
                MsgBox " 101以上になっています。"

        ElseIf文字列 = False Then
         MsgBox "キャンセルします。"

End Sub
・ツリー全体表示

【80893】Re:教えてください
発言  マナ  - 19/6/8(土) 14:53 -

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

数値ならApplication.InputBoxを使うとよいです。
ht tp://officetanaka.net/excel/vba/tips/tips37.htm
・ツリー全体表示

【80892】Re:教えてください
発言  Jaka  - 19/6/8(土) 14:51 -

引用なし
パスワード
   こんな感じ??

Dim a As Variant
a = Application.InputBox("サイズを入力してください", Type:=1)
If VarType(a) = vbBoolean Then
  MsgBox "cancel"
Else
  MsgBox a
End If
・ツリー全体表示

【80891】教えてください
質問  tomo  - 19/6/8(土) 14:25 -

引用なし
パスワード
   点数で区分けをしたいのですが、メッセージボックスに何も入力しないでokをした時 ”型が一致しません” のエラーが出てしまいます。
以下のどこが間違っているのでしょうか?
どなたか教えていただけないでしょうか。
よろしくお願いいたします。
  
Dim inScore As Integer
 inScore = InputBox("サイズを入力してください")
    If 80 <= inScore And inScore <= 100 Then
         MsgBox "Bです"
       ElseIf 20 <= inScore And inScore < 80 Then
           MsgBox " Dです。"
        ElseIf 0 < inScore And inScore < 20 Then
             MsgBox " Fです。"
          ElseIf inScore = 0 Then
              MsgBox " 0以外を入力してください。"
           ElseIf 101 <= inScore Then
                MsgBox " 101以上になっています。"
             ElseIf inScore = " " Then
              
                 MsgBox " 空白になっています。"
        
    End If
  End Sub
・ツリー全体表示

【80890】Re:PDFのプロパティ情報をExcelへ自動入力
お礼  N  - 19/6/7(金) 21:52 -

引用なし
パスワード
   皆様、ご回答いただき本当にありがとうございました。
心の底から感謝しています。
・ツリー全体表示

【80889】Re:autofilter エラー
発言  初心者  - 19/6/7(金) 17:47 -

引用なし
パスワード
   ▼Jaka さん:
>数式多くないですか?
>ShowAllData を通った後にエラーになるのでしょうか?
> 
>>  If ActiveSheet.FilterMode Then
>    msgbox "ShowAllData"       ←ここに入れて確認
>>  ActiveSheet.ShowAllData
>>  End If
>>  
>>  >Range("A1").AutoFilter field:=3, Criteria1:=nodeID
>
>どっちにしろ、このIf分の前に再計算を手動にしてみてはどうでしょうか?
>全て終わったら、元に戻すことを忘れずに・・・。
>
>おまけ
>フィルターモード解除
>Sheets("Sheet1").AutoFilterMode = False

showalldataを通ってautofilterはnodeIDの値で掛かっているのに
エラーが出てしまいます
アドバイスありがとうございます
再計算を手動にしてみる件 検討中です
・ツリー全体表示

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