Excel VBA質問箱 IV

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

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


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

【75155】Re:Sendkeys
お礼  亜矢  - 13/12/21(土) 16:59 -

引用なし
パスワード
   ▼ichinose さん:
>▼亜矢 さん:
>コードをテップ実行した場合はどういう結果でしょうか?
      For i = 1 To MM 

        Set dto = New MSForms.DataObject
        dto.SetText " " & MMat(2, i), 1
        dto.PutInClipboard
        SendKeys "^v", True
        Application.Wait Now + TimeValue("00:00:01")
        Set dto = Nothing
        Sleep 100
        SendKeys "{ENTER}", True 
        Sleep 100
      Next
上記のコードで問題なく処理ができました。ありがとうございました。
 Application.Wait Now + TimeValue("00:00:01")
 のところにSleep 100 を入れていたため、同じ変数が貼り付けられて
 しまいました。上記のコードではそれがありませんでした。
・ツリー全体表示

【75154】Re:セルの値を配列に格納して計算するユ...
お礼  ふじわら E-MAIL  - 13/12/21(土) 16:48 -

引用なし
パスワード
   γさん、アドバイスありがとうございました。

セル範囲のアドレス文字を定数にする方法、理解しました。
まだ勉強しながらの段階なので、うまくいくかどうかは時間がかかりそうです。

今検討している関数で期待している使い方としては、
1. セル範囲にいくつかの材料の特性データ(基礎データ)を入力しておく。
2. 計算開始時に、計算に使用する材料を指定して、特性データを配列変数に
  入力する。
3. 配列変数を参照し、他のパラメータ値を変化させながら所定の技術計算を
  行い計算結果を反復的に取得する。
というものです。

特性値を連続的に変化しながら繰り返しデータ参照するので、予め材料データを配列変数に収納しておくべきと思いました。
また材料データは複数の種類があり、計算目的に合わせて使用するデータを変える必要があるので、定数宣言で定数配列として登録しておけば、配列変数へ代入するのに都合がよいかなと考えました。

他によい方法があれば教えていただければ助かります。
どうぞよろしくお願いします。
・ツリー全体表示

【75153】Re:セルの値を配列に格納して計算するユ...
発言  γ  - 13/12/21(土) 15:21 -

引用なし
パスワード
   ▼ふじわら さん:
>▼γ さん:
>>▼ふじわら さん:
>>>試したところですが、エラーとなります。
>>何というエラーメッセージかも書いて、状況を説明してください。
>
>本コードの場合では、再計算実行時に
>「コンパイルエラー、定数式が必要です」
>というエラーが出ます。

Public Const BHUDATA As Variant = Range("sheet1!a3:c116")
は定数(Const)になり得ません。
というのは、=Range("sheet1!a3:c116").Value
と解釈されますから、
そこに何が入っているかによって、変わりうるわけです。
だから定数としては不適当なんでしょう。

いや、その決まった場所なんだから、という気持ちであれば、
Public Const BHUDATA As String = "sheet1!a3:c116"
とすればOKでしょうね。
ユーザー定義関数の中で、Range(BHUDATA)として使えば良いと思います。

エラー回避の方法としては上記のとおりですが、
そもそもですが、その使い方は便利ですか?
対象セルが決まっているなら、直接、セル参照を書いたほうが良いかも。
そのほうが自動的に再計算されますしね。

なお、ワークシートのOffset関数なんていうのもありますよ。
・ツリー全体表示

【75152】Re:セルの値を配列に格納して計算するユ...
発言  ふじわら E-MAIL  - 13/12/21(土) 12:59 -

引用なし
パスワード
   ▼γ さん:
>▼ふじわら さん:
>>試したところですが、エラーとなります。
>何というエラーメッセージかも書いて、状況を説明してください。

本コードの場合では、再計算実行時に
「コンパイルエラー、定数式が必要です」
というエラーが出ます。

文法上の問題かと、いろいろとコードを変えて試しましたが、基礎
知識が乏しく、どうしてよいか悩んでいるところでした。
どうぞよろしくお願いします。
・ツリー全体表示

【75151】Re:セルの値を配列に格納して計算するユ...
発言  γ  - 13/12/21(土) 12:37 -

引用なし
パスワード
   ▼ふじわら さん:
>試したところですが、エラーとなります。
何というエラーメッセージかも書いて、状況を説明してください。
・ツリー全体表示

【75150】セルの値を配列に格納して計算するユーザ...
質問  ふじわら E-MAIL  - 13/12/21(土) 10:43 -

引用なし
パスワード
   材料データを参照して特性計算するユーザ定義関数を作りたいのですが、
複数の材料データを切り替える必要があり、また一連の計算で反復的に
参照するので、最初に定数配列に格納しようと考えています。
以下のコードは、セルに入力されているデータを配列に取り込む部分を
試したところですが、エラーとなります。
いろいろと試してもうまくいません。
アドバイスを頂きたく、どうぞよろしくお願いします。

Public Const BHUDATA As Variant = Range("sheet1!a3:c116")
Function BDATA(I, j)
BDATA = BHUDATA(I, j)
End Function
・ツリー全体表示

【75149】Re:Sendkeys
発言  ichinose  - 13/12/21(土) 9:13 -

引用なし
パスワード
   ▼亜矢 さん:
コードをテップ実行した場合はどういう結果でしょうか?
・ツリー全体表示

【75148】Re:ComboBoxをクリック後、2列表示したい
お礼  Excel2002使用者  - 13/12/21(土) 0:44 -

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

>ちなみに、アップされたコードはエラーになりますよ。
>実際に動いているものを示してもらいたいですね。

関係ないところは冗長になるので省略しましたが、削除の仕方にミスがありました。失礼しました。

先にアップした

>    End列 = .Cells(4, 256).End(xlToLeft).Column  'データEnd列
>    v = .Range("A4", .Cells(.Rows.Count, 2).End(xlUp)).Value
の所は


  With Sheets("Sheet1")
    v = .Range("A4", .Cells(.Rows.Count, 2).End(xlUp)).Value
  End With
でした。


>選択したときには一列しか表示しないのが仕様のようです。

2列表示するためのプロパティーがあればと思って質問しました。ないみたいですね。

あきらめます。
ありがとうございました。
・ツリー全体表示

【75147】Re:表の比較
お礼  T-k  - 13/12/20(金) 23:50 -

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

今回初めて理解したところもありいろいろ
勉強になりました
また質問はすると思いますが
自分なりにいろいろ過去の投稿等参考に理解を深めたいと思います。

引用の件

了解いたしました自分の勘違いで申し訳ありません
でした以後きおつけます
・ツリー全体表示

【75146】Re:ComboBoxをクリック後、2列表示したい
発言  γ  - 13/12/20(金) 20:32 -

引用なし
パスワード
   選択したときには一列しか表示しないのが仕様のようです。
そのとき何列目を表示するかを指示するのが、
BoundColumnプロパティです。

どうしてもということなら、ListBoxに変更するという手も
あるかもしれませんね。

ちなみに、アップされたコードはエラーになりますよ。
実際に動いているものを示してもらいたいですね。
・ツリー全体表示

【75145】ComboBoxをクリック後、2列表示したい
質問  Excel2002使用者  - 13/12/20(金) 13:09 -

引用なし
パスワード
   ヘルプでComboBoxについて調べたのですが、分からなかったので質問します。

下記コードでは、ComboBoxをクリック後、ComboBoxには1列目の値しか表示しません。
2 列表示したいのですが、方法が分かりません。よろしくお願いします。

Private Sub UserForm_Initialize()
Dim i As Long, End列 As Long
Dim v As Variant

    End列 = .Cells(4, 256).End(xlToLeft).Column  'データEnd列
    v = .Range("A4", .Cells(.Rows.Count, 2).End(xlUp)).Value
  
  With Me.ComboBox1
    .ColumnCount = 2    'ComboBoxは 2列表示
    .ListRows = 40     'ComboBoxの表示行数40
    .ColumnWidths = "55;60"
    .List() = v       'combobox1に2列分のデータをセット
    .ListIndex = 0
  End With
End Sub
・ツリー全体表示

【75144】Re:Sendkeys
発言  亜矢  - 13/12/20(金) 10:15 -

引用なし
パスワード
   ▼ichinose さん:
>>>Dataobjectを使う方法です。
>>>
>>>
>>>参照設定「Microsoft Forms 2.0 Object Library」
>>>
>>>Sub test()
>>>  Dim dto As MSForms.DataObject
>>>  Set dto = New MSForms.DataObject
>>>  dto.SetText "tetsu-kato", 1
>>>  dto.PutInClipboard
>>>  SendKeys "^v"
>>>  Set dto = Nothing
>>>End Sub
>>通常は半角英数字ですが、上記の変数の中に半角カタカナが混じっていると、IMEmodeがひらがに勝手にに変わってしまいます。半角英数のときにはうまくいくのですが、変数の中に半角カタカナが来ると上記のプログラムでもカタカナがひらがなに変換されてしまいます。解決方法を教えていただきたいと
>>思います。
>
>提示したコードは、貼付け対象がExcelのシートだと正常に作動しますよね!!
>このコード、メモ帳に 例えば aaaイチノセ 等と入力し、これをコピーして
>対象箇所(ノーツ?)に貼り付ける と同じです。
>
>私は、このメーラーを持っていないので確認できませんが、
>上記の操作を手動で行っても同じ結果ですか?
>
 手動でコピーして貼り付けをした場合にはIMEModeは変わりませんでした。
 よろしくお願いします。
・ツリー全体表示

【75143】Re:表の比較
発言  γ  - 13/12/20(金) 7:16 -

引用なし
パスワード
   Dictionaryは結構便利なものなので、
実際に活用されると、一層理解が深まると思います。
また、他の回答にもよく出てきますので、
活用例をいくつか調べるとよろしいかと思います。

--------
なお書きとして書いた、全文引用に関する私の発言を
誤解されているようですので、説明しておきます。

ここで発言する際に、前の発言をすべて引用してから
追記されていますが、その必要はないでしょう、という意味です。
仕事に必要な質問かどうかなどということは、全く申し上げていません。
もちろん必要だから質問されていることは理解しています。
相当時間が経っているのに、疑問の解消に努めている点は、
すばらしいと思っています。

73766,75133,75135,75141などいずれも全文引用していますが、
特に75135など長文の前発言をそのまま全文引用しなくても、
相手に、そして読んでいる方に十分伝わります。
かえって冗長になって、ムダな全文引用になっているということです。
一回ごとのメールのやりとりではなく、
発言順に読んでいける掲示板の形式なので、
その重複感が目立つと思います。
必要な箇所だけ引用して、それにコメントすれば済むのです。

個人的な見解で細かいこと言うな、と思われるかも知れませんが、
実はこれはかなり一般的な話として言われていることです。
例えば、下記を参照してください。
ht★tp://www.hyuki.com/writing/techask.html#reply
(urlの記載は禁止されているようなので、あえて★をつけています。
 ★をとったものをurlとして、ブラウザーに入力して下さい。)
できるだけこうしたことに配慮したほうがご自身にとっても得です。
・ツリー全体表示

【75142】Re:Sendkeys
発言  ichinose  - 13/12/20(金) 4:41 -

引用なし
パスワード
   >>Dataobjectを使う方法です。
>>
>>
>>参照設定「Microsoft Forms 2.0 Object Library」
>>
>>Sub test()
>>  Dim dto As MSForms.DataObject
>>  Set dto = New MSForms.DataObject
>>  dto.SetText "tetsu-kato", 1
>>  dto.PutInClipboard
>>  SendKeys "^v"
>>  Set dto = Nothing
>>End Sub
>通常は半角英数字ですが、上記の変数の中に半角カタカナが混じっていると、IMEmodeがひらがに勝手にに変わってしまいます。半角英数のときにはうまくいくのですが、変数の中に半角カタカナが来ると上記のプログラムでもカタカナがひらがなに変換されてしまいます。解決方法を教えていただきたいと
>思います。

提示したコードは、貼付け対象がExcelのシートだと正常に作動しますよね!!
このコード、メモ帳に 例えば aaaイチノセ 等と入力し、これをコピーして
対象箇所(ノーツ?)に貼り付ける と同じです。

私は、このメーラーを持っていないので確認できませんが、
上記の操作を手動で行っても同じ結果ですか?

・ツリー全体表示

【75141】Re:表の比較
発言  T-k  - 13/12/20(金) 0:36 -

引用なし
パスワード
   ▼γ さん:
>> たとえば変数CががC12ならその交差している行と列の連結がKeyになる
>> と思うのですがこの1文でその解釈をパソコンがしてくれているイメージでいいんでしょうか
>> ?
>それでよいと思います。
>
>参考までにお聞きしますが、
>     For Each c In .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2)
>      dt = tSh.Cells(1, c.Column).Value2
>      com = tSh.Cells(c.Row, "A").Value
>      tDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
>    Next
>の3行の意味は理解されているのですよね。
>
>こうしうことがすべきだと思うのだけど、
>それはどこで実行しているのかな、
>といったことがもしあるなら、
>その「すべきこと」を教えてください。
>
>なお、必要もないのに全文引用するのはやめたほうが良いと思います。


返事ありがとうございます


3行の意味は理解されているのですよね。
>
 For Each c In .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2)
>      dt = tSh.Cells(1, c.Column).Value2
>      com = tSh.Cells(c.Row, "A").Value
>      tDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
>    Next

上記意味はKey以外のすべての配列要素(変数C)に対して繰り返し処理
変数dtに日にちの入力された行範囲の値(シリアル値)を代入
変数comに文字列データの入力してある列範囲の値を代入(A列)
Dictionaryオブジェクト変数tdicに変数Comとdtを連結した値をKeyとし変数Cの値と変数Cのアドレスを配列要素とし代入
*ComとdtがKeyになっているのは今回教えてもらって理解しました


自分の理解はこんな感じです


こうしうことがすべきだと思うのだけど、
>それはどこで実行しているのかな、
>といったことがもしあるなら、
>その「すべきこと」を教えてください。
>
すべきことはできていてどこの文で実行しているか
なんとなく文をみて
予測できます
変数 配列等の解釈に少し不安な部分があり不躾な質問ばかり
してしまい申し訳ありません


>なお、必要もないのに全文引用するのはやめたほうが良いと思います

必要か必要でないかと言われたとき自分のしている仕事の効率化
をするためにこのときはどうしても必要でした
今もそうですが知識と経験が足りなくここまで難しい文
をオリジナルで作れるほどのスキルがないです
道理的にもいけないことは承知していますが
このままではいけないと思い直し恥をしのんで教えを乞うています
・ツリー全体表示

【75140】Re:Sendkeys
質問  亜矢  - 13/12/19(木) 10:58 -

引用なし
パスワード
   ▼ichinose さん:
>おはようございます。
>
>Dataobjectを使う方法です。
>
>
>参照設定「Microsoft Forms 2.0 Object Library」
>
>Sub test()
>  Dim dto As MSForms.DataObject
>  Set dto = New MSForms.DataObject
>  dto.SetText "tetsu-kato", 1
>  dto.PutInClipboard
>  SendKeys "^v"
>  Set dto = Nothing
>End Sub
ありがとうございました。上の通り実施して、表示はうまくいきましたが、
もうひとつ質問があります。通常は半角英数字ですが、上記の変数の中に半角カタカナが混じっていると、IMEmodeがひらがに勝手にに変わってしまいます。半角英数のときにはうまくいくのですが、変数の中に半角カタカナが来ると上記のプログラムでもカタカナがひらがなに変換されてしまいます。解決方法を教えていただきたいと
思います。
・ツリー全体表示

【75139】Re:Sendkeys
発言  ichinose  - 13/12/19(木) 6:22 -

引用なし
パスワード
   おはようございます。

Dataobjectを使う方法です。


参照設定「Microsoft Forms 2.0 Object Library」

Sub test()
  Dim dto As MSForms.DataObject
  Set dto = New MSForms.DataObject
  dto.SetText "tetsu-kato", 1
  dto.PutInClipboard
  SendKeys "^v"
  Set dto = Nothing
End Sub
・ツリー全体表示

【75138】Re:表の比較
発言  γ  - 13/12/18(水) 23:17 -

引用なし
パスワード
   > たとえば変数CががC12ならその交差している行と列の連結がKeyになる
> と思うのですがこの1文でその解釈をパソコンがしてくれているイメージでいいんでしょうか
> ?
それでよいと思います。

参考までにお聞きしますが、
     For Each c In .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2)
      dt = tSh.Cells(1, c.Column).Value2
      com = tSh.Cells(c.Row, "A").Value
      tDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
    Next
の3行の意味は理解されているのですよね。

こうしうことがすべきだと思うのだけど、
それはどこで実行しているのかな、
といったことがもしあるなら、
その「すべきこと」を教えてください。

なお、必要もないのに全文引用するのはやめたほうが良いと思います。
・ツリー全体表示

【75137】Re:Sendkeys
発言  HARA  - 13/12/18(水) 21:22 -

引用なし
パスワード
   Dim X As String

X = InputBox("入力")
SendKeys X, True
では?間違ってたらすいません。
・ツリー全体表示

【75136】Sendkeys
質問  亜矢  - 13/12/18(水) 12:23 -

引用なし
パスワード
   よろしくお願いします。
 たとえば 変数Xにtetsu-katoというものを取得して、
 それを エクセルシート sendkeys X ,true とすると
 ひらがなモードになっていると、てつや かと と成ってしまいます。
 
 実際にはエクセルでなくノーツのメールの行うことなのですが、テストが大変な
 ためエクセルシートで試しています。
 変数にとりこまれたデータそのままをはりつける(この場合はsendkeys)
 方法がありましたら、教えていただきたいと思います。
・ツリー全体表示

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