[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストボックス内の文字をセルに』(みなみ)
VBA未経験の者です。 グラフエリア内の複数のテキストボックスに書いてある文字を セルに抽出したいのですが、何か方法はありますでしょうか。
Excelは2000を使用しております。 どうぞよろしくお願い致します。
こんな感じでいけますでしょうか。 Sub Test() Dim MyText As Shape Dim MyTextName As String Dim i As Long Application.ScreenUpdating = False MyRange = ActiveCell.Address Set MySh = Worksheets("Sheet1") MySh.ChartObjects("グラフ 1").Activate For Each MyText In ActiveChart.Shapes MyTextName = MyText.DrawingObject.Caption MySh.Cells(1 + i, 5).Value = MyTextName i = i + 1 Next MyText Range(MyRange).Activate Application.ScreenUpdating = True End Sub
(川野鮎太郎)
お返事ありがとうございます。 抽出はできたのですが、 テキストボックスの順番とセルに抽出された順番がバラバラになってしまいます。 グラフエリア内はスポーツ大会の組み合わせ表のようになっており、 テキストボックスは同じ位置に並んでいます。 表示上と同じ順番で抽出したいのですがどうすればよいでしょうか。 よろしくお願い致します。 (みなみ)
縦に並んでいますか、横に並んでいますか? また、抽出先のセルはどこがご希望でしょうか。 (川野鮎太郎)
説明不足で申し訳ありません。 テキストボックスは横に並んでおります。 抽出先はAB27,AC27 ・・・ という具合に抽出できますでしょうか。 何度も申し訳ありませんがよろしくお願い致します。 (みなみ)
これでいけますでしょうか。 並び替えるのに、AJ27からAQ28を使っています。 Sub Test() Dim MyText As Shape Dim MyTextName As String Dim i As Long Const MyR As Long = 27, MyC As Long = 28 '抽出先の行列 Application.ScreenUpdating = False Set MySh = Worksheets("Sheet1") MySh.ChartObjects("グラフ 1").Activate For Each MyText In ActiveChart.Shapes MyTextName = MyText.DrawingObject.Caption With MySh.Cells(MyR, MyC + i) .Value = MyTextName .Offset(1, 0).Value = MyText.Left i = i + 1 End With Next MyText Range("A1").Activate Range(Cells(MyR, MyC), Cells(MyR + 1, MyC + 15)).Sort _ Key1:=Range("AB28"), Orientation:=xlLeftToRight With Cells(MyR, MyC + 8) Cells(MyR, MyC).Offset(1, 0).Resize(1, 8).Value = .Resize(1, 8).Value .Resize(2, 8).ClearContents End With Application.ScreenUpdating = True End Sub
(川野鮎太郎)
MyTextName = MyText.DrawingObject.Caption の部分が
エラー'438' オブジェクトはこのプロパティまたは メソッドをサポートしていません
といわれて止まってしまいます。 どうすればエラーが出なくなるか教えていただけませんでしょうか。 毎回デバッグ画面にいってしまい困っております。 よろしくお願い致します。 (みなみ)
あれれ???一度は抽出できたんですよね・・・?う〜ん(/-_-\)
これかな・・・? エクセルのヘルプより。 隠しオブジェクト Excel 97 版の Visual Basic オブジェクト モデルでの隠しオブジェクトを示します。 これらのオブジェクトは、以前のバージョンとの互換性を保持するためにあります。 新しいコードの場合、Excel 97 で用意されている新機能を使用する必要があります。 [オブジェクト ブラウザ] ウィンドウで隠しオブジェクトを表示するには、 [オブジェクト ブラウザ] ウィンドウでマウスの右ボタンをクリックし、 ショートカット メニューの [非表示のメンバーを表示] をクリックします。
一度お試しになりますか?
(川野鮎太郎)
言葉不足で申し訳ありません。 今まで毎回エラーでデバッグ画面に飛んでおり、デバッグするとデータが抽出されていました。 また、これは関係があるか解らないのですが、 抽出データは二行にわたっており、上段が文字、下段に数値が抽出されていました。 テキストボックス内に数値は見当たらないのでどこから出てきた値なのかわかりません。 シート内を検索してみましたが該当に数値は見当たりませんでした。 当初、("Sheet1")の部分を書き換えていたのでその為のエラーだと思っていたのですが、 そうでは無いようなので再度質問させていただきました。 お忙しいところ恐縮ですが、よろしくお願い致します。 (みなみ)
いっそのこと以下に変えてみてください。 Sub Test() Dim MySh As Worksheet Dim MyText As Shape Dim MyTextName As String Dim i As Long, StCnt As Long Const MyR As Long = 27, MyC As Long = 28 '抽出先の行列 Application.ScreenUpdating = False Set MySh = Worksheets("Sheet1") MySh.ChartObjects("グラフ 1").Activate For Each MyText In ActiveChart.Shapes MyTextName = MyText.AlternativeText StCnt = Application.Find(":", MyTextName, 1) MyTextName = Mid(MyTextName, StCnt + 2, 1) With MySh.Cells(MyR, MyC + i) .Value = MyTextName .Offset(1, 0).Value = MyText.Left i = i + 1 End With Next MyText Range("A1").Activate Range(Cells(MyR, MyC), Cells(MyR + 1, MyC + 15)).Sort _ Key1:=Range("AB28"), Orientation:=xlLeftToRight With Cells(MyR, MyC + 8) Cells(MyR, MyC).Offset(1, 0).Resize(1, 8).Value = .Resize(1, 8).Value .Resize(2, 8).ClearContents End With Application.ScreenUpdating = True End Sub
(川野鮎太郎)
お返事が遅くなって申し訳ありません。 やはりエラーで止まってしまい、デバッグ画面にいってしまいます。 ひっかかっているのは MyTextName = MyText.AlternativeText の部分のようなのですが、Excel2000を使用しているのが悪いのでしょうか? (みなみ)
そのデバッグになっているときに、VBEの画面の表示−ローカルウインドウを出して MyTextの + マークを開いて、"テキストボックス ***" となっているプロパティは ありませんか? ***は、テキストボックスの中身の文字です。
ツールの参照設定で何かを有効にしないと出ないのかな・・・。? 私もExcel2000なんですけどね・・。
(川野鮎太郎)
横からお邪魔します。 先ほど、川野鮎太郎さんのマクロを試してみましたが問題なく動きましたよ。 テキストボックスに何も書いてないテキストボックスがあるんじゃないんですか? テキストボックスがあっても空白だったらパスするようなコードを追加すれば いいんじゃないんですか? (SoulMan)
う〜ん(/-_-\) 空白だったらその下の StCnt = Application.Find(":", MyTextName, 1) で エラーになるはずなのよね・・・_/ ̄|○ il||li
(川野鮎太郎)
そうなんだけど、最初に試した時そこで止まったから、、、 テキストボックスに何か適当にかいたら、後は全然止まらなかったよ。 (SoulMan)
へえぇぇ、そんなこともあるんだ(^_^A; 忙しいのに検証ありがとう^^v ところで・・・・、○○試験はどうだったんだろ・・・。 (川野鮎太郎)
ちょっと試しに作ってみました。 どうでしょう? Option Explicit Sub てすと() Dim MyStr As String, MyAry() As Variant Dim i As Long, k As Long With Worksheets("Sheet1") With .ChartObjects(1).Chart For k = 1 To .Shapes.Count MyStr = Replace(.Shapes(k).AlternativeText, "テキスト ボックス:", "") If MyStr <> "" Then i = i + 1 If i > 229 Then Exit For ReDim Preserve MyAry(1 To i) MyAry(i) = MyStr End If Next End With .Range("AB27", .Range("AB27").End(xlToRight)).ClearContents If i > 0 Then With .Range("AB27") .Resize(, i).Value = MyAry .Resize(, i).EntireColumn.AutoFit End With End If End With Erase MyAry End Sub 失礼!テキストボックスがなかったら、エラーになるのでちょっと訂正m(._.)m ペコッ http://ryusendo.no-ip.com/cgi-bin/upload/src/up0227.xls 度々すみません。↓は Dim MyShape As Shape 不要でした。m(._.)m ペコッ×3 (SoulMan)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.