Excel VBA質問箱 IV

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

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


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

【76306】行列を返す関数
質問  しゅくまる  - 14/10/29(水) 22:17 -

引用なし
パスワード
   ワークシート関数のMMULTのように、行列を返す関数を作りたいです。
戻り値の扱いが分からないので教えてほしいです。
たとえば、
関数 test(A as Range, B as Range) as variant を定義して、
戻り値として、行列の掛け算A*Bの結果として a(i,j)が計算され、
セルCiからにEjに={test(Ai:Cj,Dj:Dj)}と入力した場合に
セルCiからにEjにa(i,j)を代入するという
つまり、例としてMMULT関数と同じことをさせたいです。
戻り値の代入test=a()で#VALUE!エラーになって対処がわからずです。
・ツリー全体表示

【76305】Re:印刷品質を300dpiにする
発言  γ  - 14/10/29(水) 21:39 -

引用なし
パスワード
   こうしないと、シートの中身がわからないかも。
>Sub test()
>  Dim res
>  Dim k As Long
>
>  For Each sh In Sheets
     sh.Select
>    res = MsgBox("印刷品質を設定しますか?", vbYesNoCancel)
>    
>    Select Case res
>    Case vbYes
>      'ここに sh の 印字品質を変更するコードを書く
>    Case vbCancel
>      Exit For
>    End Select
>  Next
>End Sub
・ツリー全体表示

【76304】Re:印刷品質を300dpiにする
発言  γ  - 14/10/29(水) 21:18 -

引用なし
パスワード
   よくわからないけど、こんなことですか?

Sub test()
  Dim res
  Dim k As Long

  For Each sh In Sheets
    res = MsgBox("印刷品質を設定しますか?", vbYesNoCancel)
    
    Select Case res
    Case vbYes
      'ここに sh の 印字品質を変更するコードを書く
    Case vbCancel
      Exit For
    End Select
  Next
End Sub
・ツリー全体表示

【76303】Re:文字をブリンク(数回点滅)させる方法
発言  カリーニン  - 14/10/29(水) 20:01 -

引用なし
パスワード
   APIのSleep関数を使います。
また、色を変えたら
DoEvents
を入れて画面の再描画を反映させます。


Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()
Dim i As Integer
Dim iro As Integer
Dim c As Range
 Set c = ActiveCell
 iro = 3
 For i = 0 To 5
  '文字の色を変える
  c.Font.ColorIndex = iro
  DoEvents
  Sleep 500
  '文字の色を戻す
  c.Font.ColorIndex = xlAutomatic
  DoEvents
  Sleep 500
 Next i
 Set c = Nothing
End Sub
・ツリー全体表示

【76302】印刷品質を300dpiにする
質問  KIEV  - 14/10/29(水) 13:51 -

引用なし
パスワード
   エクセル2003を使用しています。

エクセルの一番細い線を印刷した際に、印刷されない不具合があり悩んでいましたが
ページ設定の印刷品質を300dpiに設定すると私の環境では解決する事が分かりました。
そこで簡単なマクロをツールボタンに割り当てて 300dpiに変更する作業を行って
いたのですが、シート量の多いブックが大量にあるのでもっと速度を上げて変更作業を行いたいと思い相談させて頂きます。

やりたい事は

先頭のシートを表示→ 印刷品質を300dpiに変更するかどうかの選択をYes No で行う
→次のシートを表示→(以下最後のシートまで同じ処理を行う)」

上記の流れを自動で行いたいです。
よろしくお願い致します。
・ツリー全体表示

【76301】Re:文字をブリンク(数回点滅)させる方法
発言  T.Namba E-MAIL  - 14/10/29(水) 13:20 -

引用なし
パスワード
   ▼カリーニン さん:
>目的は何でしょう?
>
>今までも同じような質問は沢山ありましたが他の方法で解決しているように思います。

「ビンゴゲーム番号スロットル」プログラムを作ったのですが、
新しい番号を表示したとき、その番号文字をブリンクさせたいのです。

For i=0 to 5
 文字の色を変える

  For j=0 to 3000(?)
  next '待機時間

 文字の色を戻す
Next i

これで巧く行かないのですが…
・ツリー全体表示

【76300】Re:シフトアップ
発言  独覚  - 14/10/29(水) 11:21 -

引用なし
パスワード
   ▼ななこ さん:
>▼独覚 さん,すみましょ式変更させて頂きます。
もし、罫線はそのままにしておきたいということであれば「貼り付け」を「値の貼り付け」
にしてはどうでしょう?
・ツリー全体表示

【76299】Re:文字をブリンク(数回点滅)させる方法
発言  カリーニン  - 14/10/29(水) 10:32 -

引用なし
パスワード
   目的は何でしょう?

今までも同じような質問は沢山ありましたが他の方法で解決しているように思います。
・ツリー全体表示

【76298】Re:シフトアップ
質問  ななこ  - 14/10/29(水) 10:04 -

引用なし
パスワード
   ▼独覚 さん,すみましょ式変更させて頂きます。

C5:F9にデータが入っています。
C5:F5を削除で、C6:F9を≪値のみシフトアップ≫させたいのです

以下の記録は、C6:F9を【切り取り】をしC5に【貼り付け】をした記録です。

  Range("C6:F9").Select
  Selection.Cut
  Range("C5").Select
  ActiveSheet.Paste
  Range("A1").Select
End Sub
*C5:F9に罫線が引いております
・ツリー全体表示

【76297】文字をブリンク(数回点滅)させる方法
質問  T.Namba E-MAIL  - 14/10/29(水) 9:38 -

引用なし
パスワード
   あるセルに文字を記入し、それを数回点滅表示させるにはどうしたらよいでしょうか?
・ツリー全体表示

【76296】Re:frameの上のボタン
質問  ふめい  - 14/10/29(水) 9:34 -

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

感謝です。
fm.controlsはまったく思いつかなかったです。

Private Sub OptionButton10_Change()

    If OptionButton10.Value = True Then
      '動的にcheckboxを生成
    Else
      '作ったcheckboxを消す。(隠すではなく消したい)
    End If

End Sub


こういったケースではどうしたらいいのでしょう?
・ツリー全体表示

【76295】Re:optionbuttonのクラス
発言  ichinose  - 14/10/28(火) 19:47 -

引用なし
パスワード
   ▼naka さん:
>配列の数を増やしたらuserformが開くのですが、
>Arrayの中のoptionbuttonは29個なので配列はこれでいいような
>気がするのですが。
>
>なぜ?  ReDim opb(28)

ん?だって、配列の添え字として、指定できるのは、

ReDim opb(28)

0から28ですよね?

でも、
>  For Each n In Array(3, 4, 26, 19, 18, 8, 7, 28, 27, 5, 6, 32, 31, 13, 12, 17, 16, 11, 10, 25, 24, 23, 22, 30, 29, 15, 14, 34, 33)
>     Set opb(n) = New class_mxout
>     With opb(n)
>       .Item = Me.Controls("OptionButton" & n)
>       .index = n
>       .caller = Me
>     End With
>  Next n

このnが配列の添え字になるのですが、
このnは、3,4,26,19、・・・・・30や、34、33もありますよね?
ってことは、0から28以外もあるってことです。

原因はここです、考えてみてください
・ツリー全体表示

【76294】Re:frameの上のボタン
発言  ichinose  - 14/10/28(火) 19:35 -

引用なし
パスワード
   ▼ふめい さん:
>動的に作成されたフレームの上に
>動的に作成されたボタンを載せると
>
>フレームが上になってボタンが隠れます。
Private Sub UserForm_Initialize()
  Dim fm As MSForms.Frame
  Dim moji As MSForms.CommandButton
  Set fm = Controls.Add("Forms.Frame.1", "Frame" & 1)
  With fm
    .Height = 200
    .Top = 50
  End With
  Set moji = fm.Controls.Add("Forms.CommandButton.1", "CommandButton" & 1)
  With moji
    .Height = 28
    .Top = 30
    .Left = 20
    .Width = 60
    .Caption = "abc"
    .BackColor = 10
    .ForeColor = vbWhite
  End With
End Sub


このようにFrameのプロパティとして、処理してみては?
・ツリー全体表示

【76293】optionbuttonのクラス
質問  naka  - 14/10/28(火) 16:31 -

引用なし
パスワード
   Option Explicit

Private opb() As class_mxout
'====================================
Private Sub UserForm_Initialize()
Dim n

  ReDim opb(28)

  For Each n In Array(3, 4, 26, 19, 18, 8, 7, 28, 27, 5, 6, 32, 31, 13, 12, 17, 16, 11, 10, 25, 24, 23, 22, 30, 29, 15, 14, 34, 33)
     Set opb(n) = New class_mxout
     With opb(n)
       .Item = Me.Controls("OptionButton" & n)
       .index = n
       .caller = Me
     End With
  Next n
 
End Sub

'====================================
Public Sub op(ByVal index As Long)
 Select Case index
 Case 3
  MsgBox "ok"
 
 End Select
End Sub

'====================================
Private Sub UserForm_Terminate()
   Erase opb
End Sub

'===============================クラス側======================
Private WithEvents myop As MSForms.OptionButton
Private MyIndex4 As Integer
Private MyCaller As Object

Public Property Let caller(newcaller As Object)
  Set MyCaller = newcaller
End Property

Public Property Let Item(NewCtrl As MSForms.OptionButton)
  Set myop = NewCtrl
End Property

Public Property Let index(NewIndex As Integer)
  MyIndex4 = NewIndex
End Property

Private Sub myop_change()
 Call MyCaller.op(MyIndex4)
End Sub

配列の数を増やしたらuserformが開くのですが、
Arrayの中のoptionbuttonは29個なので配列はこれでいいような
気がするのですが。

なぜ?  ReDim opb(28)
・ツリー全体表示

【76292】Re:シフトアップ
発言  独覚  - 14/10/28(火) 15:59 -

引用なし
パスワード
   ▼ななこ さん:
>"G1:H1:I1"を削除するとセルごと削除され、シフトアップされます。
>これを値だけ削除して、値だけをシフトアップしたいのです。
これを記録するんだから
J1からJ1以降でデータの入力されている最後から下へ三つ行ったセルまで選択、そのセル範囲をコピーして
G1セルに張り付け(値の貼り付け?)
ではないのかな?

記録したものは
Selection.Delete Shift:=xlUp
があるので自分で
>セルごと削除され、シフトアップされます。
を行っているようですが。
・ツリー全体表示

【76291】Re:シフトアップ
質問  ななこ  - 14/10/28(火) 15:43 -

引用なし
パスワード
   記録すると以下のようになります。
  Range("G1:I1").Select
  Application.CutCopyMode = False
  Selection.Delete Shift:=xlUp
  Range("A1").Select
End Sub

これを、コンパクトにしたいのです。
また、記録のコンパクト化をする時に、どんなサイトが解り易いのですか?
・ツリー全体表示

【76290】Re:シフトアップ
発言  独覚  - 14/10/28(火) 13:32 -

引用なし
パスワード
   ▼ななこ さん:
>これを値だけ削除して、値だけをシフトアップしたいのです。
>宜しくお願い致します。
これを手で行う場合、どのようにしますか?
それをマクロの記録で記録してみてはどうでしょうか?
・ツリー全体表示

【76289】シフトアップ
質問  ななこ  - 14/10/28(火) 13:27 -

引用なし
パスワード
   何時もお世話になってます
今回も宜しくお願い致します。

Option Explicit

Sub Macro1()
  Sheet1.Range("G1:H1:I1").Delete Shift:=xlShiftUp
  Range("F1").Select
End Sub

"G1:H1:I1"を削除するとセルごと削除され、シフトアップされます。
これを値だけ削除して、値だけをシフトアップしたいのです。
宜しくお願い致します。
・ツリー全体表示

【76288】frameの上のボタン
質問  ふめい  - 14/10/28(火) 13:18 -

引用なし
パスワード
   動的に作成されたフレームの上に
動的に作成されたボタンを載せると

フレームが上になってボタンが隠れます。

Set fm = Controls.add("Forms.Frame.1", "Frame" & 1)
     With fm
      .Height = 200
      .Top = 50
     End With
 
 
Set moji = Controls.add("Forms.CommandButton.1", "CommandButton" & 1)
     With moji
      .Height = 14
      .Top = 30
      
      .Left = 280
      .Width = 60
      .Value = "abc"
      .BackColor = 10
     End With

どうしたらいいでしょう?
・ツリー全体表示

【76287】Re:複数回連続して検索したいが上手くゆ...
発言  独覚  - 14/10/28(火) 9:20 -

引用なし
パスワード
   ▼ペンネーム船長 さん:

>  w = obj.Offset(0, 7).Value 'G列

Offsetは自分自身を返す場合は「Offset(0,0)」右に「7」ということはobjがA列でも
「H列」になってG列にはなりようがないけども。

ブレーク行やステップイン(一行実行)などのデバッグ方法を覚えるといいよ。
・ツリー全体表示

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