Excel VBA質問箱 IV

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

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


5428 / 13646 ツリー ←次へ | 前へ→

【50854】文字列の一部を指定範囲し別シートに複写したい 07/8/19(日) 18:51 質問[未読]
【50856】Re:文字列の一部を指定範囲し別シートに複... Lindy 07/8/19(日) 20:59 発言[未読]
【50857】Re:文字列の一部を指定範囲し別シートに複... 07/8/19(日) 21:37 発言[未読]
【50858】Re:文字列の一部を指定範囲し別シートに複... 07/8/19(日) 22:59 お礼[未読]
【50860】Re:文字列の一部を指定範囲し別シートに複... neptune 07/8/19(日) 23:09 発言[未読]
【50859】Re:文字列の一部を指定範囲し別シートに複... neptune 07/8/19(日) 23:06 回答[未読]
【50861】Re:文字列の一部を指定範囲し別シートに複... 07/8/20(月) 0:59 お礼[未読]

【50854】文字列の一部を指定範囲し別シートに複写...
質問    - 07/8/19(日) 18:51 -

引用なし
パスワード
   こんにちは
初心者ですが、Excelの一般操作で行なえることは全てマクロで可能。と信じて
(入門書にも書いていました)初心者ながら試行錯誤しながら勉強してきましたが、
「これはマクロでは無理かな?」と思えることに出会ってしまいました。
処理そのものは簡単なのですが、諦める前にと思い質問させていただきます。

【やりたいこと】
例えば、B5セルに下記の文章が入っているとして

フリードリヒII世は、フランスの英雄ナポレオンや第三帝国総統ヒトラーに信奉されていた。

B5をアクティブにして数式バーに文章を表示させ
その数式バーに表示された「フリードリヒII世」とか「ナポレオン」を 『カーソルで範囲指定』してコピー、別のシートに指定部分だけを貼り付けしたい。

【マクロ記録】
「ナポレオン」を範囲指定しして、コピペした場合
Sub Macro4()
  ActiveCell.FormulaR1C1 = "フリードリヒII世は、フランスの英雄ナポレオン                 や第三帝国総統ヒトラーに信奉されていた。"
  Sheets("要調査").Select
  Range("B4").Select
  ActiveSheet.Paste
End Sub

上記の結果が得られたのですが、
カーソルで範囲指定した「ナポレオン」に関する情報は何も記載されませんでした。
試しに、上記で得られたマクロを稼動させたら、「要調査」シートのB4に「ナポレオン」と得られました。
(※本題ではないんですが、どうして上記コードで「ナポレオン」の情報が得られたのか疑問です)
他の部分を範囲指定しても、得られるコードは上記と同じものでした。

【あきらめへの引き金】
数式バーの「ナポレン」の部分を範囲指定して、上記のコードを実行させようとしたら、ツールバーのマクロの表示が灰色表示になっており、そもそもカーソルでの範囲指定状態ではマクロの実行が出来ないのが分りました。

上記結果から、一般操作で出来ても、マクロで出来ない場合があるんだ。との私なりの結論になりつつあるんですが、どうなんでしょうか(質問の本質と離れちゃったかな?・・・)

現在は、Wクリックイベントで抽出する単語を含む文章全体を別シートにコピペし、単語の前後の不要箇所を手作業で消しています。
他の方法でもいいんですが、手作業を省く何か良い方法があったら教えて頂きたく投稿させていただきました。
宜しくお願いします。

【50856】Re:文字列の一部を指定範囲し別シートに...
発言  Lindy  - 07/8/19(日) 20:59 -

引用なし
パスワード
   ▼岳 さん:
こんにちは
>初心者ですが、Excelの一般操作で行なえることは全てマクロで可能。と信じて
>きましたが、
これはほぼ間違ってないと思いますよ。
ネイティブかどうかの違いで速度の違いはあれど実現は可能と思います。

>【やりたいこと】
これは、
Sheets("要調査").Range("B4").Value = _
 Mid(Sheets("Sheet1").Range("B5").Value, 19, 5)
で実現できます。
Mid関数をヘルプで見るとわかると思いますが、
B5の文字の先頭から19文字目から5文字を抜き出して文字列を
要調査シートのB4に格納するコードです。
何文字目かわからない場合はInstr関数
文字の長さはLen関数など色々ありますので調べてみてください。

>カーソルで範囲指定した「ナポレオン」に関する情報は何も記載されませんでした。
これは、マクロ(VBA)で出来ない。訳ではなくて自動記録が出来ない。
というだけだと思います。
実際は出来る事でも自動記録されないコードは結構いっぱいあります

>【あきらめへの引き金】
>上記結果から、一般操作で出来ても、マクロで出来ない場合があるんだ。
マクロで「記録」できない場合があるんだ。
という結論の方が良いですね^^

これからは自動記録だけではなく、自分でコードを書けるようになるように
色々調べてみると、出来ない事がいっぱい出来るようになりますよ^^

【50857】Re:文字列の一部を指定範囲し別シートに...
発言    - 07/8/19(日) 21:37 -

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

回等ありがとうございます。

>>初心者ですが、Excelの一般操作で行なえることは全てマクロで可能。と信じて
>>きましたが、
>これはほぼ間違ってないと思いますよ。
>ネイティブかどうかの違いで速度の違いはあれど実現は可能と思います。

このお言葉、これからの糧にしたいと思います。

言い訳がましいのですが、下記2つのコードは投稿前に検討して見ました。

Sub 単語抽出()

Dim myStr As String
myStr = Mid(ActiveCell, 19, 5)

Sheets("要調査").Select
Range("B65536").End(xlUp).Offset(1, 0).Value = myStr
Sheets("本文").Select    ’次の準備
End Sub


Sub 文字位置取得2()
Dim mymoji As Integer
mymoji = InStr(ActiveCell, "ナポレオン")
MsgBox mymoji
End Sub

文字数取得のLENも理解しています。

但し、この場合は「19文字目」 「5文字」 「ナポレオン」などの
プロパティの設定が必要ですよね。
これらを省略したいのです。・・・やっぱり無理なのでしょうか?

例えば、ワークシートでセル範囲を設定しておけば
myStr=Selection
だけでデーター取得が可能ですよね。これと同じようなことが出来ないのかと思ったのです。
説明不足で申し訳ありませんが、宜しくお願いします。

【50858】Re:文字列の一部を指定範囲し別シートに...
お礼    - 07/8/19(日) 22:59 -

引用なし
パスワード
   自己解決の目途がつきましたのでご報告いたします。
但し、別の解決策があったら参考にしたいと思いますので今後とも宜しくお願いします。

具体策は下記の通りです。
1.抽出する単語をカーソルで範囲指定し赤字にする(確定させる)
2.赤字の部分の文頭からの字数と文字長を取得する
  (過去にマクロを作ったことを思い出しました)
3.(2)の値を用いてMID関数で赤字の値(文字)を取得する
4.別のシートに複写する

色指定する操作が1回増えますが、1クリックだけなので解決策としました。

ありがとうございました。

【50859】Re:文字列の一部を指定範囲し別シートに...
回答  neptune  - 07/8/19(日) 23:06 -

引用なし
パスワード
   こんにちは

間違って質問を理解しているかもしれませんけど、こういう事ですか??
作ってから思うとなんか変ですが。。。

'GetWord 関数の使い方。
Sub t()
Dim ret As String

  ret = GetWord("フリードリヒII世は、フランスの英雄ナポレオンや第三帝国総統ヒトラーに信奉されていた。" _
      , "ナポレオン")
  If ret = "" Then
    MsgBox "単語はありません"
  Else
    MsgBox ret & " が抽出されました。"
  End If
End Sub

'取得用関数
Private Function GetWord(pTarget As String, pSearchWord As String) As String
  Dim lStart As String
  Dim lEnd As String
  
  lStart = InStr(1, pTarget, pSearchWord)
  If lStart <= 0 Then
    GetWord = ""
    Exit Function
  End If
  
  GetWord = Mid(pTarget, lStart, Len(pSearchWord))
  
End Function

【50860】Re:文字列の一部を指定範囲し別シートに...
発言  neptune  - 07/8/19(日) 23:09 -

引用なし
パスワード
   あ〜。。。
選択している単語を取得したかったのですね。
では↑のコードではいけませんね。

【50861】Re:文字列の一部を指定範囲し別シートに...
お礼    - 07/8/20(月) 0:59 -

引用なし
パスワード
   ▼neptune さん:
回答ありがとうございました。
実証の結果はOKなんですが、まだ、完全に理解していません。今後の参考にして勉強して行きます。

実は解決の目途が付いたと思って投稿したんですが、前に作ったのは『』の中を色文字にするというマクロで、色文字の場所を取得する方法でないことに気づき「しまった」と
ちょっと後悔したんですが、冷静に考え直したら何とかできました。

For i = 1 To Len(ActiveCell)
  Iro = ActiveCell.Characters(Start:=i, Length:=1).Font.ColorIndex
    If Iro = 3 Then
    myCount = myCount + 1
      If myCount = 1 Then
      Topmoji = i
        Else
        Lenmoji = Lenmoji + 1
      End If
    End If
Next

MsgBox Topmoji     ’赤字の文字位置
MsgBox Lenmoji + 1   ’赤字の文字長さ

これで、赤字の文字位置と文字長を確認したので、今度は確実にに出来ることが分りました。
ありがとうございました。

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