Excel VBA質問箱 IV

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

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


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

【79484】Re:セルにマクロ登録
お礼  SANO  - 17/10/27(金) 8:42 -

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

GetAsyncKeyStateをキーワードですね。
勉強してみます。

ところでエンターで完結したい理由なのですが、大した理由ではありません。
以前は誰かが作成したaccessの印刷するフォームを使用しているのですが、
そのPCが不調となりました。
空いているPCのofficeにはaccessが入って無く…仕方なく触った事の無いマクロで作成してみました。
なんとか同じように印刷できるようになったのですが、最後の印刷ボタンがコマンドボタンなのでマウスを使うため今回の質問となりました。

入力確認の為に一旦手を話してマウス使用もよいですね。


ご丁寧に回答ありがとう御座いました。
またマルチポストでもご迷惑をお掛けしました。
・ツリー全体表示

【79483】Re:セルにマクロ登録
発言  γ  - 17/10/27(金) 6:55 -

引用なし
パスワード
   どうしても、文字通り、Enterキーが押されたことを認識させる必要がある、
ということなら、それは可能ではあるでしょう。
GetAsyncKeyStateをキーワードにして検索してみて下さい。

ただし、Enterキーを察知して、特定条件を満たしたら印刷を実行したいなら、
入力されたキーを絶えず監視するコードを走らせる必要があります。
(組込のイベントプロシージャとは違いますから)
Excelは、そのコードの実行のためだけに資源が使われますから、
ほかの処理はそっちのけということになります。

喩えれば、人が息を吸ったときに、何かのチェックをさせるようなもので、
ありふれていることだけに、24時間、息を吸ったかどうかを監視し続けるので、
人はろくなことができません。ノイローゼになります。それと同じです。

むろん、監視コードの開始と終了をユーザーから指示させれば、
四六時中の監視は不要になりますが、
印刷の指示は省けても余計なことが増えて、
かえって手間がかかることになります。

頻繁には起きることのない印刷なんですから、
ボタンを押すとか、特定セルへの入力(Changeイベントでキャッチ)くらいのことは、甘受してはどうでしょうか。
・ツリー全体表示

【79482】Re:セルにマクロ登録
発言  γ  - 17/10/26(木) 20:58 -

引用なし
パスワード
   >マウスを使わずエンターのみで操作をしたいからです。

であれば、
その印刷マクロにショートカットキーを関連づければ、
キー操作だけでマクロの起動ができますが。

ところで、
その印刷は、それほどの頻度と迅速性が求められているんですか。
キー操作で高速に指示を出さないと、時期を逸してしまうのでしょうか。
・ツリー全体表示

【79481】Re:セルにマクロ登録
発言  マナ  - 17/10/26(木) 19:00 -

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

>なぜボタンではダメなのかと言いますと。
>マウスを使わずエンターのみで操作をしたいからです。
>セル、ボタンのロックを外してシート保護をしてもセルからボタンにはカーソルが飛びませんでした。

わたしは、あまり便利に思いませんが
Acceleratorプロパティは使えませんか。
・ツリー全体表示

【79480】Re:セル内の改行されている行を指定した...
お礼  あみ  - 17/10/26(木) 17:05 -

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

まだコードがなんと書かれているかが理解できないので、実際に動かしながら確かめていきたいと思います。

ご丁寧な対応ありがとうございました!
・ツリー全体表示

【79479】Re:セル内の改行されている行を指定した...
お礼  あみ  - 17/10/26(木) 17:04 -

引用なし
パスワード
   返答ありがとうございます。
リンク先を読ませていただきます。

今回の質問はこれで終わりにして、また分からなければ再度聞かせて頂きます。
ご丁寧な対応ありがとうございました!
・ツリー全体表示

【79478】Re:セルにマクロ登録
発言  マルチネス  - 17/10/26(木) 9:37 -

引用なし
パスワード
   サロンの方が解決済みになっているとは言い難い。
回答者へのお礼やマルチポストの謝罪が全くなされていない。
平気なのか?

回答が付いているのに削除しようとすることも考えられない。
・ツリー全体表示

【79477】Re:セルにマクロ登録
お礼  SANO  - 17/10/26(木) 8:29 -

引用なし
パスワード
   マルチポスト失礼しました。
サロンは削除の仕方がわからなかったので解決済みとしました。

なぜボタンではダメなのかと言いますと。
マウスを使わずエンターのみで操作をしたいからです。
セル、ボタンのロックを外してシート保護をしてもセルからボタンにはカーソルが飛びませんでした。

何か他の方法を考えます。

回答ありがとうございました
・ツリー全体表示

【79476】Re:セルにマクロ登録
発言  γ  - 17/10/26(木) 7:28 -

引用なし
パスワード
   セルにマクロを登録することはできませんが、
それができたとしても、
発生する副作用(意図せざる印刷が発生してしまう)や、
そのことをユーザーが認知しているか、
といったことを考えるべきでしょう。

その点で、ボタンが最善だし、なぜボタンでは駄目なのか理解に苦しみます。

なお、マルチポストと知らずに、最初の回答をしましたが、
こうしたこともきちんと理解したうえで利用してください。

こちらのサイトの基本方針を読んで下さい。
> マルチポストについて
> 別のサイト(掲示板)にまったく同じ目的の投稿をすることを、
> 一般に「マルチポスト」といいます。当質問箱では、マルチポストは
> 原則認めています。つまり、ほかのサイトで質問したことをこのサイトで
> 質問してもかまわないということです。
>
> しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を
> 出しました」ということを宣言してください。
> そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を
> 書いてください。質問しっぱなし、というのはモラルに反します。
> 「解決したからいいや」というのではありません。
>
> また、マルチポストを明示的に禁止しているサイトとのマルチポストを
> してはいけません。
サロンはマルチポストを禁止していますから、ここで同じ発言してはいけません。

こちらを放置しないようにしてください。
人間性が問われますよ。(大げさか)
・ツリー全体表示

【79475】Re:セルにマクロ登録
発言  γ  - 17/10/25(水) 21:28 -

引用なし
パスワード
   ダブルクリックまたは右クリックをトリガーとした
イベントプロシージャを使うのが一般的だと思います。
・ツリー全体表示

【79474】Re:重複チェックをしたい
発言  マナ  - 17/10/25(水) 21:14 -

引用なし
パスワード
   ▼たもつ さん:

>仮にですが、作業する対象シートをSheet2とした場合、
>Sheet1、Sheet2、Sheet3の中で重複している"品番"があった場合、


1)この場合、色をるけるのは、Sheet2のみですか
2)後日、重複セルが増減することはないのですか
・ツリー全体表示

【79473】セルにマクロ登録
質問  SANO  - 17/10/25(水) 17:52 -

引用なし
パスワード
   長文失礼します。
コマンドボタンで実行していたマクロを任意のセルで実行したいです。
下記はsheet1のB8に入力した数値でsheet4を印刷するマクロです。
※5枚以上印刷はメッセージボックスが出ます
このマクロをsheet1のB10を印刷ボタンとしてEnter押した時に実行などできますでしょうか?
ご教示の程宜しくお願いいたします。

Sub 印刷()

With Sheets("Sheet1")
If .Range("B8").Value > 5 Then
If MsgBox("枚数を確認してください" & _
vbLf & "続けますか?", vbYesNo) = vbNo Then
Exit Sub
End If
End If
Sheets("Sheet4").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=.Range("B8").Value, Copies:=1
End With
Application.Goto Sheets("Sheet1").Range("B6")

End Sub

ちなみにsheet1のモジュールに下記の構文をいれましたが、
B10に数値入力しEnterを押すと上記のマクロは作動しました。
B8入力のB10で印刷したいです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B10")) Is Nothing Then Exit Sub
If IsNumeric(Target) Then
Worksheets("Sheet4").PrintOut Copies:=Target.Value

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

【79472】重複チェックをしたい
質問  たもつ  - 17/10/25(水) 16:08 -

引用なし
パスワード
   環境は、Excel2013です。

Sheet1、Sheet2、Sheet3...Sheetnと沢山シートが存在しています。
また、シートは逐次作成されていきます。

仮にですが、作業する対象シートをSheet2とした場合、
Sheet1、Sheet2、Sheet3の中で重複している"品番"があった場合、
書式を変更するボタンを設置したいと思っています。
(背景色を黄色に、文字を赤色に

作業する対象シートは日々変わります。
作業する対象シートと、左右のシートとを比較して
重複している品番の書式を変えたいです。

条件付き書式で実現しようと思いましたが、
条件の適用先を可変するような方法が思い浮かばず
VBAで実現可能かご教示頂けないでしょうか。

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

【79471】IE制御のJavaScript待機
質問  なねし  - 17/10/25(水) 14:59 -

引用なし
パスワード
   はじめまして。
Excel VBAでIEを制御しているのですが、
setTimeoutを使用してJavaScriptを実行した後、
そのJavaScriptの実行が完了するまで待機させる方法がわかりません。

BusyやreadyStateでは待機できませんでした。

どなたかご教授いただけないでしょうか。
・ツリー全体表示

【79470】Re:セル内の改行されている行を指定した...
発言  でれすけ  - 17/10/24(火) 22:49 -

引用なし
パスワード
   こんばんは。

例えばこんな感じになるでしょうか。


------ 標準モジュール --------------------------

Sub sample()

Dim txt As New clsMultText

 Set txt.CellRange = ActiveCell
 
 txt.Characters(2, 1).Font.ColorIndex = 3

End Sub


----- クラスモジュール clsMultText -------------
Private mCell As Range
Private mLines As Variant

Public Property Set CellRange(ByVal vNewValue As Range)
  Set mCell = vNewValue.Cells(1, 1)
  mLines = Split(mCell.Value, vbLf)
End Property

Public Property Get Lines(Optional ByVal Line) As Variant
  If IsMissing(Line) Then
   Lines = mCell.Value
  Else
   Lines = mLines(Line - 1)
  End If
End Property

Public Property Get Characters(Optional Line, Optional Start, Optional Length) As Characters
Dim i As Long, NC As Long
 
 If IsMissing(Line) Then
   Set Characters = mCell.Characters
   Exit Sub
 End If
 
 NC = 0
 
 For i = 1 To Line - 1
  NC = NC + Len(mLines(i - 1)) + 1
 Next
 
 If IsMissing(Start) Then Start = 1
 
 If IsMissing(Length) Then
   Set Characters = mCell.Characters(NC + Start, Len(mLines(i)) - Start + 1)
 Else
   Set Characters = mCell.Characters(NC + Start, Length)
 End If
 
End Property
・ツリー全体表示

【79469】Re:セル内の改行されている行を指定した...
発言  マナ  - 17/10/24(火) 22:21 -

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

>本日はもう返信できませんがよろしくお願いいたします。

わたしも、明日の夜まで返信できません。
このあたりを勉強してみてください。

ht tp://www.start-macro.com/55/w/s060.html
ht tps://www.moug.net/tech/exvba/0050122.html
・ツリー全体表示

【79468】Re:2枚目のシートの特定のセルの値を違...
発言  マナ  - 17/10/24(火) 21:57 -

引用なし
パスワード
   ▼初心者XXXXYYYY さん:


>>1)新規ブックを作成
>>2)名前を付けて保存
>>
>>この操作を「マクロの記録」してみてください。
>>次に、記録されたマクロを実行してみてください。

記録されたマクロを実行することはできましたか?


>この操作を行い、コードを追加してみたのですができません。
>ちなみに、シートを指定しない場合はコンパイルエラーが発生せず、実行されます。

実行時エラーじゃなかったのですか?
・ツリー全体表示

【79467】Re:2枚目のシートの特定のセルの値を違...
回答  初心者XXXXYYYY  - 17/10/24(火) 21:38 -

引用なし
パスワード
   ▼マナ さん:
>▼初心者XXXXYYYY さん:
>
>1)新規ブックを作成
>2)名前を付けて保存
>
>この操作を「マクロの記録」してみてください。
>次に、記録されたマクロを実行してみてください。

この操作を行い、コードを追加してみたのですができません。
ちなみに、シートを指定しない場合はコンパイルエラーが発生せず、実行されます。

一個下のコードではなく、さらにその下のコードの場合。
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Worksheets(2).Cells(i, 1) & ".xlsx"

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Cells(i, 1) & ".xlsx",
・ツリー全体表示

【79466】Re:2枚目のシートの特定のセルの値を違...
発言  初心者XXXXYYYY  - 17/10/24(火) 21:32 -

引用なし
パスワード
   ▼マナ さん:
>▼初心者XXXXYYYY さん:
>
>1)新規ブックを作成
>2)名前を付けて保存
>
>この操作を「マクロの記録」してみてください。
>次に、記録されたマクロを実行してみてください。

Sub Macro1()
  Workbooks.Add
  ActiveWorkbook.SaveAs Filename:="C:\Users\IBM_ADMIN\Documents\Book2.xlsx", _
    FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
  ActiveWindow.Close
End Sub
・ツリー全体表示

【79465】Re:セル内の改行されている行を指定した...
質問  あみ  - 17/10/24(火) 19:51 -

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

実際にやりたい事は、改行されている行数を指定して、その行の書式を変更したいです。(太字にしたり、赤字にしたり。。。)

1つのセルに下記のように入力されている状態だとします。
1行目:○○○○○○
2行目:△△△△△△
3行目:□□□□□□
とあり、3行目だけ(最後の行)を指定して赤字にしたい等です。

現在1つのツールを作ろうと考えておりまして、セルを指定する所まではできたのですが、セル内を指定するコードが全く見当もつかず、まだ何も書けてはいません。
お恥ずかしながらVBAの改行から学んでいる所です。

本日はもう返信できませんがよろしくお願いいたします。
・ツリー全体表示

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