教えて!goo限定 1000名様に電子コミック1000円分が当たる!!

エクセルに関する質問をさせて頂きます。
エクセルのユーザーフォーム上に表示されているテキストボックスのテキストを、マウスの右クリックでコピー、別のテキストボックスにペーストしたく考えています。
色々調べて見たんですが、方法が見つかりません。
どなたかご存知の方がおられましたらご教授頂きたくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

こんばんは。

Wendy02です。

>ユーザーには「Cntl+C」と「Cntl+V」で対応させるようにします。

とても残念な対応ですが、それがベストだと思います。私が書いた方法は、Excelでは上級レベルのテクニックです。お話の様子では、たぶん、基本的なコードの貼り付け位置が違っているような気がします。

こちらは、新規ブックで試してみましたので、間違いはないはずですが、こちらは、分っている部分でも、何か指摘し忘れている部分があるのかもしれません。

一度、Class 内モジュール・ペインの横の枠をクリックして、いくつかにブレークポイントをつけて、きちんと設定しているか、様子をみていただければと、もしかしたら分るかもしれません。ひとつずつ丁寧にみれば、どこかで抜け落ちが分るはずですが、ある程度のレベルが必要になってしまいますので、私のほうも、これ以上はなんともいいようがありません。
    • good
    • 0
この回答へのお礼

色々有難うございました。
とりあえず、「Cntl+C」と「Cntl+V」でVer1.0として共用開始します。

その上で、Ver1.1なり、Ver2.0にすべく勉強します。
またその時点で分からない事が出てきたら質問させて頂きますのでその節は、何卒宜しくお願い致します。
本当に有難うございました。

お礼日時:2006/03/05 22:12

こんにちは。

Wendy02です。

すみません、貼り付けるコードがひとつ抜けていました。

#'<UserForm モジュール>
Dim myClass1() As New Class1 'モジュールの一番上に貼り付けます。

>標準モジュールシートに、そのまま記述していいのでしょうか。
>Subなどの記述はいらないのでしょうか。

Class モジュールでは、値が保存出来ないので、標準モジュールに、セットしたわけですね。

それで、様子をみてください。でも、右クリックも数がたくさんあると、ちょっとシンドイですね。
    • good
    • 0
この回答へのお礼

何度も申し訳ありません。
UserForm モジュールの先頭行に
Dim myClass1() As New Class1
を貼り付けてみましたが、うまく動きません。
テキストボックスに入力したテキストを選択して、右クリックしても何の変化もありません。
さらに別のテキストボックスにカーソルを移動して、右クリックしても変化がありません。
ちなみに「Ctrl+V」で貼り付けてみたら

Dim myClass1() As New Class1

と貼り付きます。


テキストボックスはユーザーフォーム上に設置したマルチページに配置しているので、Private Sub MultiPage1_Initialize()でも試してみましたがダメでした。
(もちろん、Private Sub UserForm_Initialize()に貼り付けてもみました。)

完成までにあまり時間がありませんのでユーザーには「Cntl+C」と「Cntl+V」で対応させるようにします。

色々お手数をお掛けしてすいませんでした。
有難うございました。

お礼日時:2006/03/05 20:39

こんにちは。


Wendy02です。

>ただ、なんせテキストボックスは100以上もあり、どのテキストボックスのデーターを、

最初に、それを言っていただいたほうが良かったですね。私の読みが足らなかったせいなのですが、2つあるのと100あるのではコードは変ります。

基本的には、同じなのですが、以下のようなコードになります。ひじょうに、ややこしいです。たぶん、良いとは思っていますが、ちょっと自信がありません。このコードで全てのテキストボックスに設定できるはずです。

ただし、自分のテキストボックスに貼り付けることは出来ませんし、一度貼り付けると、そのデータは失われます。


'<UserForm モジュール>

Private Sub UserForm_Initialize()
   Dim myTxtBoxes As New Collection
   Dim ctrl As Variant
   Dim i As Integer
   ReDim myClass1(1 To 1)
   With myTxtBoxes
   For Each ctrl In Me.Controls
    If TypeOf ctrl Is MSForms.TextBox Then
     .Add ctrl
    End If
   Next ctrl
   End With
 
   ReDim Preserve myClass1(1 To myTxtBoxes.Count)
   For i = 1 To myTxtBoxes.Count
      Set myClass1(i) = New Class1
      With myClass1(i)
         .Box = myTxtBoxes(i)
         .Index = i
      End With
    Next
End Sub

'<標準モジュール>
Public oldIndex As Integer
Public myData As Variant

'<Class モジュール- Class1>

Private WithEvents myTxtBox As MSForms.TextBox
Private myIndex As Integer
Public Property Get TxtBox() As MSForms.TextBox
   Set TxtBox = myTxtBox
End Property
Public Property Let Box(ByVal BoxNewValue As MSForms.TextBox)
   Set myTxtBox = BoxNewValue
End Property

Public Property Get Index() As Integer
   Index = myIndex
End Property
Public Property Let Index(ByVal intNewValue As Integer)
   myIndex = intNewValue
End Property

Private Sub myTxtBox_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button <> 2 Then Exit Sub
 If oldIndex = 0 Then
    If myTxtBox = "" Then Exit Sub
    myData = Empty
    Set myData = New DataObject
    myData.SetText myTxtBox.Text
    myData.PutInClipboard
    oldIndex = myIndex
  ElseIf oldIndex <> myIndex Then
   myTxtBox.Paste
   oldIndex = 0
  End If
End Sub
    • good
    • 0
この回答へのお礼

わざわざ再度の回答有難うございます。
回答頂いたモジュールを貼り付けて見ました。
結果は、、、動きませんでした。。。
回答内容の
<標準モジュール>
Public oldIndex As Integer
Public myData As Variant
についてですが、標準モジュールシートに、そのまま記述していいのでしょうか。
Subなどの記述はいらないのでしょうか。
そんなに詳しくないもので申し訳ありません。

お礼日時:2006/03/05 14:35

こんばんは。



ユーザーフォーム自身にクリップボードをもっていますが、クリップボードを使わずに、以下のように、右クリックして、ダイレクトに別のテキストボックスに送ってしまえば簡単ではないでしょうか?


Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If TextBox1.Text <> "" Then
  If Button = 2 Then
   TextBox2.Text = TextBox1.Text
  End If
End If
End Sub

>「マウスの右クリック」でコピーし、マウスの右クリックでペーストしたいんです。

もし、これをするなら、以下のように、一旦、クリップボードに確保しなければなりませんね。お好きなほうをお使いください。

'--------------------------------------------
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Set MyData = New DataObject
If TextBox1.Text <> "" Then
  If Button = 2 Then
   MyData.SetText TextBox1.Text
   MyData.PutInClipboard
  End If
End If
End Sub

Private Sub TextBox2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  If Button = 2 Then
   TextBox2.Paste
  End If
End Sub
    • good
    • 0
この回答へのお礼

回答有難うございます。
是非一度試して見たいと思います。
ただ、なんせテキストボックスは100以上もあり、
どのテキストボックスのデーターを、どこに持っていくのかはユーザー任せになってしまうのです。
まだまだ悩むことは多くありそうですが、もう一分張りしてみます。
有難うございました。

お礼日時:2006/03/05 10:02

専門的は話になるのですが


ユーザーフォームはマクロで組むで作ります。ユーザーフォームであたの望んでいるマウスでのコピー&ペーストは、
イベントプロシージャーという物を作成しないといけないようです。

ユーザーフォームではマウスでのコピー&ペーストは基本的には無理だと思います。

やはりショートカットキーの、Ctrl+CでコピーCtrl+Vで貼り付けるのが一番簡単です。
    • good
    • 0
この回答へのお礼

回答有難うございます。
おっしゃる通り、かなり難しいと言うのは詳しい知人も言っていました。
もう少しじっくり検討してみます。有難うございました。

お礼日時:2006/03/05 09:56

文字列をドラッグで選択した後、Ctrl+CでコピーCtrl+Vで貼り付けではだめでしょうか

この回答への補足

回答有難うございます。
質問内容を補足させて頂きます。
バージョンは「EXCEL2000」です。
また、質問したい内容は、ユーザーフォーム上のテキストボックスの内容を、「マウスの右クリック」でコピーし、マウスの右クリックでペーストしたいんです。
言葉足らずで大変申し訳ありません。
何卒宜しくお願いします。

補足日時:2006/03/04 23:51
    • good
    • 0
この回答へのお礼

回答有難うございました。
補足に書きました通り、マウスの右クリックで行いたいと考えています。
ショートカットキーで行う事に耐えられない使用者となる予定なもんで。。。
もう少しじっくり検討してみます。

お礼日時:2006/03/05 09:54

Officeが解りませんが私はExcel2003です


新規ワークシートを開いて、ウインドウメニューから整列、並べて表示にしてテキストボックスをCtrl+ドラッグ&ドロップでコピーできます。
そういう事じゃなかったらごめんなさい
    • good
    • 0
この回答へのお礼

回答有難うございました。補足に書かせて頂いた内容がしたかったのです。
質問内容の記載がちょっと分かりにくくて申し訳ありませんでした。

お礼日時:2006/03/05 09:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAのテキストボックスに文字列を貼り付ける方法

こんにちは
エクセルのVBAのユーザーフォーム上に作ったテキストボックスに
他でコピーした文字列(または数値)を貼り付け(ペースト)たいのですが、
テキストボックスのプロパティの項目のどれかを設定すれば可能でしょうか?
現状ではここで、右クリック自体できなくなっています。
使っているのはエクセル2000です。

Aベストアンサー

こんばんは。

ちょっと気になったことなので、もしかしたら私の間違いかもしれませんが、#3 のご紹介になつている k窓の kClipboardPaste関数は、Userform上では、Excelの通常のClipBoard ダイアログとは違うものを使っているので、うまくいかないのではないかと思います。

早い話は、やはり、Ctrl + V ですが、以下のようにすれば、右クリックで貼り付けは利きます。ただし、TextBox のプロパティのMultiline をTrue にしておかないと、改行マークが出てきてしまいます。


Private Sub TextBox1_MouseUp(ByVal Button As Integer, _
     ByVal Shift As Integer, _
     ByVal X As Single, _
     ByVal Y As Single)
  Application.EnableEvents = False
 If Button = 2 Then
  Application.SendKeys "^v"
 End If
 Application.EnableEvents = True
End Sub

こんばんは。

ちょっと気になったことなので、もしかしたら私の間違いかもしれませんが、#3 のご紹介になつている k窓の kClipboardPaste関数は、Userform上では、Excelの通常のClipBoard ダイアログとは違うものを使っているので、うまくいかないのではないかと思います。

早い話は、やはり、Ctrl + V ですが、以下のようにすれば、右クリックで貼り付けは利きます。ただし、TextBox のプロパティのMultiline をTrue にしておかないと、改行マークが出てきてしまいます。


Private Sub TextBox1_Mouse...続きを読む

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

Qユーザーフォームのコピー?

エクセルのVBでユーザーフォームをコピーしたいのですが。
例えば、「ユーザーフォーム1」と「ユーザーフォーム2」を同じ形式で作成し、リンクするセルのみを変えたいのです。
今は、それぞれのコントロールをコピーしてます。
いい方法ありますか?というか可能ですか?

Aベストアンサー

●コピーの方法をもう少し詳しく書くと、
(1)まずUserForm1(ユーザーフォームを挿入した時のデフォルトのオブジェクト名)は完成したフォームとします。
(2)UserForm1を選択して、フォーム上の何も無い所を右クリック、すべて選択。
(3)コントロールのある所にマウスを移動し、右クリック、コピー。
(4)次にユーザーフォームを挿入(UserForm2が挿入されたとします)
(5)UserForm2を選択して、フォーム上の何も無い所を右クリック、貼り付け。

これでできるように思いますが・・・(Excel2000、Excel97で確認)


●エクスポートの方法としては、
(1)まずプロジェクトエクスプローラを表示しておきます。
(2)プロパティウインドウも表示しておきます。(表示→プロパティウインドウ)
(3)プロジェクトエクスプローラでUserForm1を選択。
(4)右クリックし、ファイルのエクスポートを選択。
(5)どこかのフォルダに保存します。(UserForm1.frmで保存したとします)
(6)UserForm1のプロパティウインドウのオブジェクト名を例えばUserForm1aに変えます。
(7)プロジェクトエクスプローラで右クリックし、ファイルのインポートを選択。
(8)保存したUserForm1.frmを選択。開くボタンでインポートされます。
(9)プロパティウインドウで、インポートされたユーザーフォームのオブジェクト名を例えばUserForm1bに変えます。

以上で同じフォームが2つできたと思いますが・・・(これもExcel2000、Excel97で確認)

●コピーの方法をもう少し詳しく書くと、
(1)まずUserForm1(ユーザーフォームを挿入した時のデフォルトのオブジェクト名)は完成したフォームとします。
(2)UserForm1を選択して、フォーム上の何も無い所を右クリック、すべて選択。
(3)コントロールのある所にマウスを移動し、右クリック、コピー。
(4)次にユーザーフォームを挿入(UserForm2が挿入されたとします)
(5)UserForm2を選択して、フォーム上の何も無い所を右クリック、貼り付け。

これでできるように思いますが・・・(Excel2000、Excel97で確認)
...続きを読む

Qテキストボックスにセルの値を複写する方法

Excel VB (Excel 2007) の質問

Sheet1のセルD1、D2、D3に文字が入力されています。
そして同じシート上の任意の場所にテキストボックスが配置されています。
テキストボックスには"テキスト ボックス 1"、"テキスト ボックス 2"、"テキスト ボックス 3"と名前がつけられています。

セルD1の値を"テキスト ボックス 1"に複写、セルD2の値を"テキスト ボックス 2"に、セルD3の値を"テキスト ボックス 3"に
複写したいのですがどのようにすればいいのでしょうか。

インターネットのQ&Aで調べましたが同じような質問でも難しすぎて理解できません。
例えば以下のように簡単にできないでしょうか。
D1の値を"テキスト ボックス 1"に複写する場合

Range("D1").Select
Selection.Copy
ActiveSheet.Text."テキスト ボックス 1".Activate  'テキストボックスを選択(アクティブ)する記述が解りません。
ActiveSheet.Paste                 ’選択したテキストボックスに貼り付ける方法もわかりません。

勿論上記の記述ではうまくいきません。
VB初心者でお手数をおかけしますがよろしくお願いします。

Excel VB (Excel 2007) の質問

Sheet1のセルD1、D2、D3に文字が入力されています。
そして同じシート上の任意の場所にテキストボックスが配置されています。
テキストボックスには"テキスト ボックス 1"、"テキスト ボックス 2"、"テキスト ボックス 3"と名前がつけられています。

セルD1の値を"テキスト ボックス 1"に複写、セルD2の値を"テキスト ボックス 2"に、セルD3の値を"テキスト ボックス 3"に
複写したいのですがどのようにすればいいのでしょうか。

インターネットのQ&Aで調べましたが同じような...続きを読む

Aベストアンサー

テキストボックスにセルの値を入れるのだけならマクロは必要はありません。
 
【操作手順】
 ・テキストボックスス「テキスト ボックス 1」を選択する。
 ・数式バーで「=D1」を入力して【Enter】キーを押す。

  以上を"テキスト ボックス 2"、"テキスト ボックス 3"を同様に行う。

ネットでも色々説明しています。以下は手順を絵的に説明しています。
http://www.bayclotho.jp/blog/archives/907

QエクセルVBAでUserFormを起動した時

エクセルVBAでUserFormを起動した時に自動的に実行される動作を記述したいのですが、
どうすればよいでしょうか?

Private Sub UserForm1_Load()

End Sub

だとだめでしょうか?

Aベストアンサー

こんにちは。お邪魔します。

> UserFormを起動した時
というのが、一意の表現ではないので、
多少混乱しているようですが、

UserFormを読み込んだ時、
にあたるイベントが
Private Sub UserForm_Initialize()

End Sub

UserFormを表示(再表示)した時
にあたるイベントが
Private Sub UserForm_Activate()

End Sub

という感じです。

UserFormを読み込みながら表示する場合、
(UserFormが読み込まれていない状態で、UserForm.Show、など)
UserForm_Initialize()
の次に
UserForm_Activate()
が発効します。

UserForm(のインスタンス)が読み込まれてている間、
常に有効にしたいプロパティ設定などは
UserForm_Initialize()

UserFormを表示した時の条件によって処理を換えたい場合などは
UserForm_Activate()

といった感じの使い分けをします。

こんにちは。お邪魔します。

> UserFormを起動した時
というのが、一意の表現ではないので、
多少混乱しているようですが、

UserFormを読み込んだ時、
にあたるイベントが
Private Sub UserForm_Initialize()

End Sub

UserFormを表示(再表示)した時
にあたるイベントが
Private Sub UserForm_Activate()

End Sub

という感じです。

UserFormを読み込みながら表示する場合、
(UserFormが読み込まれていない状態で、UserForm.Show、など)
UserForm_Initialize()
の次に
UserForm_Activate()
が発効します...続きを読む

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExcel VBAで、ユーザーフォームの値を、モジュールで使用したい。

VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。
ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。

Sub TEST ()
Dim N
Userform1.Show
MsgBox N
End Sub

Private Sub CommandButton1_Click()
Dim N
N = TextBox1.Text
UserForm1.Hide
End Sub

Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

Aベストアンサー

'モジュールに変数宣言(グローバル変数)
'Public 宣言すると他のモジュールやフォームと
'共有できる変数になります。
Public AA As String

'sample
'A1 を実行する。

Sub A1()
Call A2
AA = InputBox("input", , AA)
End Sub

Sub A2()
AA = InputBox("input", , AA)
End Sub

QExcel VBA コンボボックスの初期値の設定について

いつもお世話になっています。
Excel VBA コンボボックスの初期値の設定について教えてください。
ユーザーフォームを表示させた時、そこにあるコンボボックスには何も表示されていません。
コンボボックスのボタンを押すとちゃんと
「アジア」「ヨーロッパ」「アメリカ」等の語群が表示されます。

ユーザーフォームを表示させた時点でコンボボックスに「アジア」を表示させるにはどうすればいいか教えてください。
よろしくお願いします。

Aベストアンサー

UserForm Initialize
ComboBox1.Text = ComboBox1.List(0)

Qexcelのリストボックスで選択した項目をアクティブセルに入力方法

もしかしたら既出かもしれませんが・・・
フォームコントロールのリストボックスで入力範囲の指定したリストをリンクするセルをワークシート上にクリックしたセルに入力させる方法はありますか?
もし、不可能でしたら、ActiveXコントロールのリストボックスでも構いません。よろしくお願いいたします。

Aベストアンサー

そのリストボックスの、コードの表示で
Private Sub ListBox1_Click()
ActiveCell = ListBox1.List(ListBox1.ListIndex)
End Sub
と入れるだけ。
コントロールツールボックスのコントロールを、ワークシートに直接
貼り付けた場合。
WEBや解説書で、ListboxとかListindexなど調べましたか。

QExcelでマクロ実行中に画面を固定する方法

Excelでマクロ(VBA)を実行しているとお考えください。
内容は他のシートのデータを別のシートにコピー&ペーストするとお考えください。
すると、画面がめまぐるしく動きます。
これをとめる方法をご存知の方教えていただければうれしいです。
(以前、やったことがあるんですが、忘れてしまいました)
(また、検索で調べようとしたのですが、どのようなキーワードで検索すればいいのかわかりませんでした(私のキーワードでは見つかりませんでした))
よろしくお願いいたします。

Aベストアンサー

はじめまして.

以下のコマンドでできると思いますよ。

マクロの最初に
Application.ScreenUpdating = False '画面更新抑止
を入れて、

マクロの最後に
Application.ScreenUpdating = True '画面を更新
を入れる。

こんなのでどうでしょう!?
では。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング