エクセルでマウス指定したセルの一部を取り込む方法

このQ&Aのポイント
  • エクセルで特定のセルから部分的な内容を取り出す方法について質問があります。
  • 現在はセルを開いて該当文字列を選択し、Ctrl+cでコピーし、クリップボード経由で変数に取り込んでいますが、操作がやや複雑です。
  • VBAを使用してセルの一部を直接取り込む方法や、他の取り込み方法についてのアドバイスをいただきたいです。
回答を見る
  • ベストアンサー

エクセルでマウス指定したセルの一部を取り込みたい

1つのセルに書き込まれた内容の一部を取り出したいのですが、 マウスで該当個所をポイントしておいて、ショートカットキーを押して 取り込みたいと考えています。 例えばセルの内容が"  IU0030.DTX02 = OA0055.DTX02;  "の場合、OA0055.DTN02をマウスでポイントしたら、"OA0055.DTN02"を取得するということです。 現在はセルを開けて該当文字列を選択し、Ctrl+cでコピーし、クリップボード経由で変数に取り込んでいますが、操作がやや複雑です。 どのようにVBAを記述したらよいでしょうか? 文字列の解析などのVBA記述は心得ております。 またこれ以外に取り込む方法はないでしょうか? よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

細かな説明を省いてしまいました。すみません。 > 数字キーを押すと、そのまま入力されてしまいます。 > Ctrlキーと一緒に押すと書式指定ダイアログが出てしまいます。 最初にマクロ SetCustomShortcut を実行して下さい。 Application.OnKey はショートカットを割り当てる命令です。 マクロ SetCustomShortcut でテンキーではない数字キー1~9にそれぞれ ショートカットを割り当てています。Ctrl の同時押しは必要はありません。 アクティブセルのデータが "  IU0030.DTX02 = OA0055.DTX02;  " のとき 1 キーを押すと、   IU0030.DTX02 が MsgBox で表示され、2 キーを押すと   OA0055.DTX02; が表示されます。要するに = で要素を区切った場合、何番目を取り出すの かを数字キーひとつで指定できる...ということです。要素が2~3程度の 場合、操作性の点で言えばマウスを併用するよりも、この方が高速オペレー ションできるはずです。 今は MsgBox で表示してますが、コードを修正すればいかようにもデータ 加工できますよね? MsgBox の Trim$(vBuf(Num - 1)) を検索プロシージャに引数で渡せばよろ しいかと思います。 なお、設定したショートカットを元に戻すには、マクロ RestoreShortcut を実行します。

believe_me
質問者

お礼

説明ありがとうございました。 試してみました。 マウスを使うよりこちらの方が早いと思います。 素晴らしいマクロ、本当にありがとうございます。

believe_me
質問者

補足

すいません。以下の命令の「・∀・」はどうやって入力するのでしょうか? MsgBox Trim$(vBuf(Num - 1)), , "( ・∀・)Get!" 自宅ではカット&ペーストでマクロに貼り付けられますが、職場はセキュリティが厳しく、インターネット接続できませんし、USBメモリやFDなど一切接続できないようになっており、キーボードから入力しなければなりません。

その他の回答 (6)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.7

ろくに #4 の補足とか読んでなかったので、勢いで #6 を回答しましたが... 意図を理解した上で、改めて別提案。こんな仕組みはどうですか? この手の問題は、ワークシート上で何とかしようとすると大変なんです。 そこでユーザーフォームを使います。ご希望にかなり近いと思いますよ。 【手 順】 1. VBE で[挿入]-[ユーザーフォーム] 2. フォームにテキストボックスを適当に一つ配置 3. フォームの ShowModal プロパティーを False にする 4. 下記ソースコードをコピペ 5. 後はフォームを起動するだけ セルを選択すると、そのセルの内容がテキストボックスにリアルタイムで 反映されます。そのテキストボックス内で検索したい語をドラッグする.. か、またはキーボードで選択して Enter ...といった感じですね。 検索部については解決済みとのことなので省略しました。 Option Explicit Private WithEvents xlApp As Application ' // このプロシージャでキーワード表示 Private Sub GetKeyword()   Dim sKey As String   sKey = Trim$(TextBox1.SelText)   If Len(sKey) > 0 Then     ' ここで変数 sKey の内容を検索プロシージャに渡す     MsgBox sKey, vbInformation, "( ・∀・)Get!"   End If End Sub Private Sub TextBox1_MouseUp( _   ByVal Button As Integer, ByVal Shift As Integer, _   ByVal X As Single, ByVal Y As Single)   ' Drag --> Left Button Up でキーワード表示   If Button = xlPrimaryButton Then Call GetKeyword End Sub Private Sub TextBox1_KeyDown( _   ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)   ' Enter キーでもキーワード表示   If KeyCode = 13 Then Call GetKeyword End Sub Private Sub UserForm_Initialize()   On Error Resume Next   Set xlApp = Application   With Me     .StartUpPosition = 0 'Manual     .Top = xlApp.Top     .Left = xlApp.Left     .Width = xlApp.Width     .Height = 60   End With   With TextBox1     .Top = 5     .Left = 5     .Width = Me.InsideWidth - 10     .Height = Me.InsideHeight - 10     .Font.Name = "MS ゴシック"     .Font.Size = 16   End With   Me.TextBox1.Text = Trim$(ActiveCell.Text) End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)   Set xlApp = Nothing End Sub ' // Application レベルのイベント Private Sub xlApp_SheetSelectionChange( _   ByVal Sh As Object, ByVal Target As Range)   On Error Resume Next   TextBox1.Text = Trim$(Target.Cells(1).Text) End Sub

believe_me
質問者

お礼

またまた回答ありがとうございました。 No.6の補足で「 ・∀・」の入力が分からないと書いてしまいましたが、AscWでコード値が分かりましたのでOKです。 12539 8704 12539

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

妥協案で、データのあるセル上で数字の 1,2,3...キーを押します テンキーではありませんよ。  # ちなみにセル編集中にマクロを動かすことは、非常に制限が多いですけど  # 一応可能です。かなりトリッキーですが... Option Explicit Sub SetCustomShortcut()   Dim i As Long   For i = 1 To 9     Application.OnKey CStr(i), "'GetValue " & CStr(i) & "'"   Next i End Sub Sub RestoreShortcut()   Dim i As Long   For i = 1 To 9     Application.OnKey CStr(i)   Next i End Sub Sub GetValue(ByVal Num As Long)      Const DELIMITER = "="      Dim sVal As String   Dim vBuf As Variant      On Error Resume Next   sVal = ActiveCell.Text   If InStr(sVal, DELIMITER) > 0 Then     vBuf = Split(sVal, DELIMITER)     If vBuf(Num - 1) <> "" Then       MsgBox Trim$(vBuf(Num - 1)), , "( ・∀・)Get!"     End If   End If End Sub

believe_me
質問者

補足

回答ありがとうございます。 試してみましたが、私のやり方が不味いのでしょうか。うまく行きません。 数字キーを押すと、そのまま入力されてしまいます。 Ctrlキーと一緒に押すと書式指定ダイアログが出てしまいます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。Wendy02です。 最初に、 こちらの回答者側としては、全体の状態がまったくみえないので、Excelをどのように使っていらっしゃるか分かりません。 「文字列の解析などのVBA記述は心得ております。」とおっしゃっているのなら、もう少し、プログラマブルに全体を考え直したほうがよいです。正直なところ、何か、Excel の基本的な機能の知識に疑問を持ってしまいました。 セルをオープンすること自体は、「入力待ち」状態になって、Excelの機能が停止している状態です。セルをオープンした状態では、何も使えません。Wordのように、センテンスや単語という単位は存在していません。ある種の規則を以って切り分けるしかありません。 >セル内のどのワードを選択するかをマウスによって指定したいのですが・・・ >ワードが2つの場合の例をあげましたが、ワードの数は不定です。 現実問題として、そのような作業で、マウスで単語選択でしたら、最初から、Excelを使わないほうが早いです。たぶん、Wordで出来るかもしれませんが、たぶん、ほとんどのテキストエディタでも、センテンスに対する単語の選択をする機能があるはずです。

believe_me
質問者

補足

言葉足らずで申し訳ありません。 メインフレームのPL/Iソースプログラムの解析を行っています。 PL/Iソースをエクセルに落とし込むツールがあり、エクセルで調べるのが一番効率的な環境におります。 例えば以下のようなエリア定義があったとします。 DCL 01 IPAREA,     02 GROUP1,       03 AAA BIT(16),       03 BBB BIT(4),     02 GROUP2,       03 AAA FIXED DEC(5),       03 BBB PTR; これに対して、以下の命令があったとします。      CALL(IPAREA.GROUP2.AAA, W@XYZ.ABC, OPAREA.XYZ); 各行が1つのセルに入っています。 " CALL(IPAREA.GROUP2.AAA, W@XYZ.ABC, OPAREA.XYZ); "を選んだ場合、「IPAREA.GROUP2.AAA」か「W@XYZ.ABC」か「OPAREA.XYZ」のどれを検索するかVBAに教えてやらねばなりません。 この方法を模索しています。 現在はセルを開け、該当文字列を選択し、Ctrl+cでコピーし、セルを閉じ、ショートカットキー(Ctrl+aを割り当てている)を押してVBAを実行しています。この操作が煩雑な為、より操作が簡単な方法を探しています。大規模なシステムメンテを行っているので作業量を少しでも減らしたいと思っています。 単純にこの文字列で検索するのではなく、要素に分け、PL/Iの文法に沿って正しい場所を見つけなけらばなりません。 例えば「IPAREA.GROUP2.AAA」で検索した場合、要素は「IPAREA」「GROUP2」「AAA」の3つになり、検索結果は以下のようになります。 DCL 01 IPAREA,     02 GROUP1,       03 AAA BIT(16),       03 BBB BIT(4),     02 GROUP2,       03 AAA FIXED DEC(5), <=このセルが選択される       03 BBB PTR; この検索については解決済みです。 コンパイルシートのクロスリファレンスを見れば分かることですが、紙ベースの資料を見るのは大変ですし、リソースの制約から自由にコンパイルできない環境です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >Ctrl+cでコピーし、クリップボード経由で変数に取り込んでいますが、操作がやや複雑です。 クリップボード・オブジェクトから、取り出しているのですか?? クリップボード・オブジェクトを使いこなせるなら、本来は、必要ないように思いますが。 本当は、どのようなコードを組んでいるか見せていただいたほうがよいです。 ワークシートのセル上では、ワンクリック・イベントがありませんので、ダブルクリックイベントが用いられます。つまり、ワンクリックだと、セルをセレクトしているのか、どちらか分からなくなってしまうからでしょう。 'シートモジュール Private Buf As Variant Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim myVal As Variant Const MYINDEX As Integer = 1 'インデックスの数(0~)  If IsEmpty(Target.Value) And Buf = Empty Then Exit Sub  Cancel = True  If Buf = Empty Then    Buf = Target.Value    Beep  Else    myVal = Split(Buf, "=")    If UBound(myVal) > 0 Then    myVal = Trim(myVal(MYINDEX))    Else    '区切り文字がない場合    myVal = Trim(myVal(0))    End If    myVal = Replace(myVal, ";", "")    ActiveCell.Value = myVal    Buf = Empty  End If End Sub

believe_me
質問者

補足

回答ありがとうございます。 試してみましたが、セル全体をセレクトしてしまうようですね。 セル内のどのワードを選択するかをマウスによって指定したいのですが・・・ 最初のクリックでは値が取得できないなど、ちょっと不安定ですね。 ワードが2つの場合の例をあげましたが、ワードの数は不定です。 マウスのクリックによるトリガーだとうまく行かないような気がします。 マウスで位置を指定しておいて、何らか別のトリガー(CTRLキー+任意キーなど)でVBAを実行したいと考えています。 マウスによる指定が困難な場合、割り切って必要なワード数のVBAを別々に作って、それぞれにショートカット(CTRL+1,2,3など)を割り当てて、1番目のワード、2番目のワード、3番目・・と言う具合にやろうかなとも思っています。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.2

InStr 関数 も使えますね。

believe_me
質問者

補足

回答ありがとうございます。 "あ"にするか"い"にするかをマウスによって指定する方法をお聞きしています。 InStr 関数はその後のVBAで使用することになりますが、この方法は存じております。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

"="でSplitしたものの1番目を取得してはいかがでしょう? なお あ=い の場合、Splitでは "あ"が0番目、 "い"が1番目になります。

believe_me
質問者

補足

回答ありがとうございます。 "あ"にするか"い"にするかをマウスによって指定する方法をお聞きしています。 "="でSplitはその後のVBAで使用することになりますが、この方法は存じております。

関連するQ&A

  • EXCEL 2003 でセル内で直接編集ができない

    セル内にある文字列で、直接該当する文字列にマウスポインターでクリック(ダブルクリック)し文字を挿入したり、文字を修正したり削除することができなくなりました(もとはたぶん出来ていたと思いますが)。 【補足】 数式バーで該当の場所にマウスポインターを指定しクリックすると、挿入や修正、削除はできる。 (数式バーでも該当セル内でも編集できます) どこをどの様に修正すれば、セル内で直接編集が可能になるのかご教授よろしくお願いします。

  • Excelでセル内の文字列のみをコピーする方法

    Excelでセル内の文字列のみをクリップボードにコピーする方法を教えてください。 ※クリップボードにコピーをする方法であり、他のセルに値のみをペーストする方法ではありません。 満たしたい点は2つです。 ・表示している文字列のみを取得 ・複数のセルを同時にコピー 一つのセルに以下の文字列が入っていた場合(#以外) #123 #"abc" コピーするとクリップボードを文字列として取得すると以下の文字列が得られます #"123 #""abc""" これを以下の文字列が得られるようにしたいのです。 #123 #"abc" 1つのセルだけでいい場合は、セルを編集状態にしてコピーしたり アクティブセルの数式バーをコピーすればいいのですが、 これは当然、複数のセルを同時に選択する場合には使えません。 VBAを使う方法でもそうでなくてもかまいません。 (VBAの場合はコードもお願いしたいです) よろしくお願いします。

  • エクセル セル内の文字列を他所にコピーペースト

    エクセルのセル内に入力されているデータ(文字列)をコピーして、別の箇所(エクセルでは無い)に貼り付けていくという作業する必要があります。 (1)マウスカーソルを該当するセルに持って行き、(2)ダブルクリックし、(3)左クリックを押しながらカーソルで文字列を指定(黒白反転)させてから(4)コントロール+Cでコピーして、貼り付けたい別ファイルに持って行き(5)コントロール+Vで貼り付ける・・・・というやり方しか知りません。 ここで、(3)の動作に不安があります。該当するセル内すべての文字列を指定できればいいのですが、大量にやらなければならないので、前後の一文字を抜かしてしまうということがありそうだからです。 ショートカットキー等何か良い方法ありますでしょうか?

  • HYPERLINKで指定セル内容で曖昧検索したい

    エクセルのHYPERLINK関数で検索文字をB2セルにを入力した場合、B2セル+*のようにセル内容で曖昧検索出来ないのでしょうか? 例えばC列にABC123、ABC-123、ABC 123、・・・のどれかで入力されているような場合、検索セルにABCと入れると該当するセルにジャンプするようにしたいのですが。 現在フィルタを使用しているのですが使い勝手が悪く何とかできないかと。 VBAでの対応でも良いのですが当方永遠のVBA初心者なのでご了承くださいませ。 検索値が「該当なし」もあり得ますのでご配慮お願いします。

  • エクセル セル参照

    A1セルには1~20までの任意の数を入力します B1には文字列を入力します。 A1に入力された数によって、B1セルの文字列の内容をC1~C10の各セルにコピーするにはどうしたらよいでしょうか。 たとえば、A1が3のとき、B1の文字列をC3にコピーしたい。 VBAでもかまいません。 お願いします。

  • エクセルで空白セルを空セルに

    B1にセルをおきます。A1の内容を比較します。 if A1=0 then B1を空セルに else A1をB1に代入 endif 同様にA列の内容を比較し結果をB列に格納します。 VBAではどのように記述しますか?

  • excel vba セルにマウスをのせて写真表示

    excel2003を利用しています。 技術的に可能か、どうかわかりませんが、もし可能であれば、 どのように、記述(vba)すればよいか教えていただきたいです。 とあるセルに、写真が保管されているパスが入力されています。 そのセルにマウスカーソルを合わせると、そのアドレスに保管されている 写真がポップアップやコメントマークのような感じで、パッと表示され、 マウスカーソルを、そのセルから、外すと写真の表示が消えるようにしたいです。 もし可能であれば、教えていただけると大変ありがたいです。よろしくお願いします。

  • エクセルのセルで入力とセル内のカーソル移動

    エクセルのセルで入力の時、間違った文字だけを訂正したいので、「←」「→」キーで移動したら、左側或いは右側のセルへ移動してしまいます。そうなると、もう一回マウスでそのセルを指定し直さなければならないので、何か簡単なやり方ありますでしょうか。マウスでの操作を避けたいので、ショートカットキーがありますでしょうか。 ご存知の方是非ご教示ください。よろしくお願い致します。

  • Excelマクロ、セル内容を加工してクリップボードに送りたい

    Excelマクロの質問です。 セル自体は加工せず、 セルの内容を加工してクリップボードに送りたいです。 たとえば、セルの内容が、 8540 として、 クリップボードには、 今日の出費:8540円 という文字列を送りたいです(それをテキストエディタにコピペしたいのです) セルの内容は8540のままいじらないで済む方法を探しています。 よろしくお願いします

  • Excel 条件付き書式◆ 同じ行の特定のセルを指定するには

    A列には、ずらーっと、日付の数値が入っています。 B列には、「その日の行動スケジュール」の文字列が入っています。 ”今日”になったら、その日付に該当するB列の「行動スケジュール」だけ文字の色を変えたいと思いました。 このとき、列全体を範囲指定して、「条件付き書式」を設定しようと思ったのですが、数式の書き方がわかりません。 まず、B列のBのところをクリックして列全体を指定した上で、「条件付き書式」の設定のダイアログを出し、「数式が」を選択すればいいだろうというところまではわかります。 しかし、数式において、どのように記述すると、”B列の特定のセルと同じ行にあるA列のセル”だけを選択できるようになるのかがかわかりません。 おそらく、下の●のところに、同じ行にあるA列のセルだけを指定するための記号が入ると思うのですが、手本がどこにも見つかりません。 =●●=today()

専門家に質問してみよう