1 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 17:01:50.51 ] ExcelのVBAに関する質問スレです ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Applications』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、 コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R) 前スレ: Excel VBA 質問スレ Part25 toro.2ch.net/test/read.cgi/tech/1341722983/
2 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 17:03:06.09 ] 関連スレ: VBAなんでも質問スレ toro.2ch.net/test/read.cgi/tech/1342087380/
3 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 00:06:38.58 ] MsgBox ">>1 乙", vbAlert しかしWin8でもVB6サポートされるとか やっぱ当分VB系は安泰だなぁ
4 名前:デフォルトの名無しさん [2012/08/20(月) 10:28:43.34 ] 閉じたままのBook内のデータを参照するにはどうしたらいいですか? そして閉じたぱぱのBook内のデータをオートフィルタすることもできたりしますか?
5 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 10:40:26.94 ] パパやママのことは、直接本人(両親)に相談してください というのはさて置き、閉じたままと言っても、当然本当に閉じたままでは 何も出来るわけが無いので、「閉じたまま=GUI上で開かず」と解釈すると ExcelのCOMインスタンスを作ってやってそれで開けばいいだけ 後の操作は普通に開いてるブックやシートと全く同じ GUI上には表示せずに、裏で開いた状態でなんでも出来る
6 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 11:10:48.19 ] >>4 どうしてググろうと思わないわけ?
7 名前:デフォルトの名無しさん [2012/08/20(月) 11:54:07.42 ] prt.iza.ne.jp/images/news/20120819/502425_c450.jpg 雷でよく見る実にわかりにくい図のことで質問です。 濃いピンクが安全だということらしいけど それより内側は危険であり、さらにそれより外側も危険という認識で合ってますか?
8 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 12:12:49.20 ] どこの誤爆だw
9 名前:デフォルトの名無しさん [2012/08/20(月) 16:55:32.92 ] ExcelVBAで Outlookのテンプレートの機能をプログラミングをしたいのですが その方法を教えてくださぃ。 Outlookのテンプレート機能を使わないのは メールの本文中にその当日の「日付」を使ったり Excelのセルに用意したデータをメールの本文に使いたいからです。
10 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 17:16:34.42 ] outlookのvbaでやれ
11 名前:桃白白 [2012/08/20(月) 17:30:59.98 ] みんなおはよう >>7 合ってると思うよ
12 名前:デフォルトの名無しさん [2012/08/20(月) 17:45:38.20 ] モジュル先頭で宣言する変数はそのモジュル全体で使えるとのことですが マクロ実行後も値はそのままですか? 次回にマクロ実行したときは値はそのぱぱ残ってる値に加算されますか?
13 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 17:59:32.15 ] >>12 その変数がクリアされなければ残ってる。 いつクリアされるのかは、明らかではない。 クリアされて困るなら、シートに保存すべし。 詳しくは、こことか参照。 www.moug.net/tech/exvba/0150116.html
14 名前:デフォルトの名無しさん [2012/08/20(月) 18:08:05.83 ] >>5 COMインスタンスとはなんでしょぅか? >>13 びっくりですね。 これからはモジュル先頭で変数は宣言しないことにしました。
15 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 18:26:39.82 ] >>14 > これからはモジュル先頭で変数は宣言しないことにしました。 関数の実行開始から終了までの同一性は保証されてるから、その範囲で使うなら問題ない。 「関数の実行開始から終了まで」というのは、 dim g as long sub foo() g = 1 bar debug.print g end sub sub bar() g = g + 1 end sub のとき、foo()の開始から終了までという意味。 なお、クラスを使ってgをプロパティかprivate変数にすれば、知らない間にクリアされるということはなくなる。
16 名前:デフォルトの名無しさん mailto:sage [2012/08/20(月) 23:54:52.30 ] >>15 では無いが よく解らなかったらとりあえずシートに残して使う時だけ拾うようにしとけば良いんでねーの 解ったら自分で直せる訳だし COMはググれとしか。多分意識しないでも使ってるんだろうけど。
17 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 05:38:35.68 ] ユーザーフォーム表示してると表示されてる間はまずクリアされないよ
18 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 09:28:19.50 ] ユーザーフォームを表示している時に 別のブックを開いてアクティブにするにはどうしたらいい?
19 名前:デフォルトの名無しさん [2012/08/21(火) 09:58:35.99 ] 元のブック.ユーザフォーム.Activate
20 名前:デフォルトの名無しさん [2012/08/21(火) 11:16:09.57 ] ありゃ? 元のブックのユーザフォーム.を開くには 元のブック.ユーザフォーム.Showでできないのはどうして? >>18 単に「別ブック.Activate」でいいじゃん。
21 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 17:04:40.11 ] >>20 マクロから開くのではなくて、 普通にフォルダからダブルクリックで開いたときに アクティブになるようにしたいのです。
22 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 17:10:40.46 ] >>21 したいのならしろよ。
23 名前:デフォルトの名無しさん [2012/08/21(火) 17:31:25.65 ] 他ブックのFormをActivateするにはどうしたらいいですか?
24 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 17:40:51.79 ] 荒らすなよ
25 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 18:13:39.86 ] >>21 マクロ使わないなら、スレ違いだからどっか行って。
26 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 18:26:13.56 ] >>25 スレ違いですか? 元々開いてるユーザーフォームのあるブックの マクロで設定できないかと思ったんですが
27 名前:デフォルトの名無しさん mailto:sage [2012/08/21(火) 18:29:55.86 ] thisworkbook: private sub workbook_open() userform1.show end sub
28 名前:デフォルトの名無しさん mailto:sage [2012/08/22(水) 12:32:49.07 ] For sh = 5 To 10 Worksheets("" & sh & "").Activate ActiveSheet.ChartObjects.Add(0, 500, 960, 300). _ Chart.SetSourceData Sheets("" & sh & "").Range("C" & sh & ":C" & num + 5 & "") ActiveSheet.ChartObjects(1).Chart.ChartType = xlLineMarkers Cells(1, num).Select Next sh 埋め込みグラフが選択されているのをはずしたいだけなのですが Cells(1, num).Selectのところで「アプリケーション定義またはオブジェクト定義のエラーです。」 と出ます。解決策をご教授ください。
29 名前:デフォルトの名無しさん mailto:sage [2012/08/22(水) 12:49:13.39 ] >>28 ActiveSheet.Cells(1, num).Select にしてみたら? あと、Withとか使うと楽かもよ
30 名前:桃白白 [2012/08/22(水) 23:06:16.79 ] >>28 numが定義されてないんじゃね
31 名前:デフォルトの名無しさん mailto:sage [2012/08/22(水) 23:22:08.89 ] >>30
32 名前:桃白白 [2012/08/22(水) 23:40:17.20 ] >>31 やめて!桃白白にむやみにリンクを張らないで! 定義のエラーっていってたから定義されてないんじゃねって桃白白考えたの Cellsはオブジェクトが指定されなかったらアクティブワークブックのアクティブシート を返しちゃうだろ WorksheetsほげほげActivateでアクティブシートが選択されてんだから ActiveSheetってつけなくてもいんじゃね
33 名前:桃白白 [2012/08/23(木) 00:27:36.41 ] フォフォフォ… ∧ ∧ |≡V≡| |O(\)O| (V)(゚Д゚)(V) ヽ三i三ソ (/ \) ∪"∪
34 名前:桃白白 [2012/08/23(木) 00:28:10.42 ] フォッフォッフォッ (V)∧_∧(V) ヽ(・ω・)ノ / / ノ ̄ゝ フォッフォッフォッフォッフォッ (V)∧_∧(V) ヽ( )ノ / / .....ノ ̄ゝ
35 名前:デフォルトの名無しさん [2012/08/24(金) 06:50:22.30 ] マクロを頻繁に使ってたらPCが非常に重くなり、Excelの超基本操作のセル移動でさえ2-3秒かかることがあります(通常は一瞬)。 仕事で使ってるのでAM9からPM6までずっとExcelは立ち上げたままです。 マクロが原因なのは間違いないと思います。 軽くするにはどうしたらいいでしょうか?
36 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 07:28:47.43 ] >>35 マクロが原因だということまで特定できてるなら そのマクロのバグを修正しろよ・・・
37 名前:35 [2012/08/24(金) 07:59:23.13 ] >>36 そんなこといわずに あなたが上級者なら よく初心者が犯しがちな メモリーを消費したままになる良くないコードを予想し それに対しての対策を指示してあげたらどうです?
38 名前:桃白白 [2012/08/24(金) 08:03:24.58 ] >>37 エスパーしたらいいじゃない! 教えてくれたらいいじゃない! ってか じゃあ桃白白が教えてあげちゃう グローバル変数使うのやめな これで100%解決する 桃白白に感謝しちゃったらいいじゃない
39 名前:35 [2012/08/24(金) 08:21:39.84 ] 残念ながら白桃には感謝できん グローバル変数なんて野蛮なものは使ってないからだ
40 名前:桃白白 [2012/08/24(金) 08:29:22.43 ] >>39 いいやお前はグローバル変数を使っている 使っていないと思い込んでいるだけだ 桃白白は上級者だがお前は初心者だ 初心者は上級者の言うことを素直に聞くべきだ お前はグローバル変数を使っている お前はグローバル変数を使っている 目を閉じて反芻しろ
41 名前:35 [2012/08/24(金) 08:33:19.36 ] >>40 のび太のくせに生意気だ
42 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 11:37:23.01 ] VBA触り始めて数日の初歩的な質問ですみません。 環境はWindows7、Excel2007です。 ユーザーフォーム上のテキストボックスに セルをリンクさせたいのですが、テキストボックスのプロパティの Text欄、Value欄に「=Sheet1!A1」と入れても「」内の文字列が そのまま表示されてしまいます。 Excelのシート上のテキストボックスで同じ操作をすると そちらはきちんとセルがリンクされるのですが…。
43 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 11:49:49.47 ] >>42 ユーザーフォームのテキストボックスなら 「=Sheet1!A1」を入れるのはControlSource
44 名前:へっぽこエスパー mailto:sage [2012/08/24(金) 12:34:01.86 ] >>35 エラーメッセージとか出ないの? Excel2007だとこんなバグもあるみたいだけど support.microsoft.com/kb/971594/ja
45 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 12:34:21.37 ] >>43 おおおおお!出来た! これでとりあえず形だけは完成しました。 ありがとうございます
46 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 13:36:54.76 ] >>42 です 実際に動かしてみたら問題が発生してしまいました。 下記の状況です。 ユーザーフォーム上でコマンドボタンnAとコマンドボタンnBを重ねて表示 コマンドボタン1Aを押すとSheet1!B1に1が入力されコマンドボタン1Aが背面に移動 コマンドボタン1Bを押すとSheet1!B1に0が入力されコマンドボタン1Bが背面に移動 コマンドボタン2Aを押すとSheet1!B2に1が入力されコマンドボタン2Aが背面に移動 コマンドボタン2Bを押すとSheet1!B2に0が入力されコマンドボタン2Bが背面に移動 以下コマンドボタン3〜と続く。 Sheet1のA列にはあらかじめ決まった数字が入力されていて、Sheet1のC列はA列とB列の積です。 Sheet2のA1はSheet1のC列の合計、SUM(Sheet1!C:C)です。 たとえばSheet1!A1に30、Sheet1!A2に40が入力されていたとして、 ボタン1Aを押すとSheet1!C1が30*1で30となり、まずSheet2!A1が30になり、 次いでボタン2Aを押すとSheet1!C2が40*1で40、Sheet2!A1が30+40で70になります。 このSheet2!A1を先ほどのテキストボックスのControlSouceに入力したのですが コマンドボタン1Aを押すとSheet2!A1にSheet1!A1 * Sheet1!B1の数値、上記の例だと30*1の30という数値が 入力されてしまい、SUM(Sheet1!C:C)という数式は消え、他のコマンドボタンを押しても反応がなくなってしまいます。 どうすればよいのでしょうか。。
47 名前:へっぽこエスパー mailto:sage [2012/08/24(金) 15:54:05.98 ] >>46 各コマンドボタンのクリックイベントに Sheet2.Cells(1,1) = "= SUM(Sheet1!C:C)" って入れといたらどうですか? あと、On/Offの2値を扱いたいなら コマンドボタンよりトグルボタンのほうが良くないですか?
48 名前:デフォルトの名無しさん mailto:sage [2012/08/24(金) 22:39:47.47 ] >>46 ,47 まずControlSource使うのやめて、 各ボタンのクリックイベントに、TextBox1.Text = Sheet2.Range("A1").Valueとか書くのが正解だろ (つかそう書いたサブルーチン呼べ) というかまずボタンを重ねて配置するとか馬鹿なことをやめろよ
49 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 11:19:20.04 ] 埋め込みグラフの目盛り線を選択したいのですが、エラーになってしまいます。 ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select どこを直せばいいですか。
50 名前:デフォルトの名無しさん [2012/08/25(土) 11:59:34.26 ] シートに挿入したチェックボックスが消せません。 どこを直せばいいのですか。 Activesheet.Shapes.Delete
51 名前:桃白白 [2012/08/25(土) 12:04:08.98 ] >>49 なんというエラーが出る?桃白白にもわかりそうなエラー? わかりそうなやつだったら答えちゃうけど
52 名前:桃白白 [2012/08/25(土) 12:12:42.00 ] >>50 For Eachでぐーるぐる Dim s As Shape For Each s In ActiveSheet.Shapes If (s.Type = MsoShapeType.msoFormControl) Then If (s.FormControlType = XlFormControl.xlCheckBox) Then s.Delete End If End If Next
53 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 13:12:04.08 ] >>47 >>48 役割はトグル以外の何物でもないのですが、 クリックすると白黒画像からカラーに変わるギミックを どうしてもやりたくて、方法がわからずこのような原始的な方法を取りました。 各ボタンに記述してみます。ありがとうございました
54 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 13:26:17.55 ] >>49 選択しようとするからじゃないの? ActiveSheet.ChartObjects(1).Activate
55 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 14:32:05.25 ] >>54 ActiveSheet.ChartObjects(1).Activate ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select できましたwありがとうございます
56 名前:桃白白 [2012/08/25(土) 14:40:56.33 ] >>55 そんなの桃白白認めない
57 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:22:08.78 ] ExcelVBAの型変換について疑問がありますので、詳しい方、ご教示ください。 ExcelVBAでは、文字型の数値が、代入先の型に自動的に変換されるものと漠然と思っていました。 以下のようにサンプルを作ってテストしてみましたが一貫しない結果がでました。 Test1は、文字列が数値化されて数値の合計が表示されました。 しかし、Test2では、文字列の連結として表示しました。 さらに、宣言文の(**)の部分を、Dim Int3, Int4, n As Long からDim Int3, Int4 As Long としてnを除くと、正常に数値として加算されました。 このように変わるのはどうしてでしょうか? 原因がわからないと安心してマクロを組めないのでよろしくご教示ください。 (WindowsXP Excel2007です) Sub 型変換テスト() Dim Int1, Int2 As Long '(*) Dim Int3, Int4, n As Long '(**) Dim Sum1, Sum2 As Long ' ******* Test 1 ************ Int1 = "1827" Int2 = "1931" Sum1 = Int1 + Int2 MsgBox ("Test 1 = " & Sum1) ' ******* Test 2 ************ Int3 = "1827" Int4 = "1931" Sum2 = Int3 + Int4 MsgBox ("Test 2 = " & Sum2) '文字列の連結 End Sub
58 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:32:32.39 ] >>57 ちゃんと宣言されてないよ
59 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 17:33:16.19 ] 初心者がよくハマるやつだな Dim Int1, Int2 As Long Int1は型指定無し、Int2はLong型 Dim Int3, Int4, n As Long Int3, Int4は型指定無し、nはLong型 Dim Int3 As Long, Int4 As Long, n As Long Int3, Int4, n全部Long型 型はひとつひとつ指定しないとダメ Dim Int3, Int4, n As Long だと最後のnしか型指定してないことになる 型指定無し(Valiant型)だと、代入した値依存の内部型になるから Intのつもりで実はstr3 + str4をやっていたというわけだ
60 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:25:24.46 ] 初心者じゃ無いつもりだけど未だに分からないのがdecimal。 なんで宣言出来ないんだ??
61 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:49:27.72 ] >>60 仕様に対して「なんで」って言い出したらキリがない
62 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 18:50:38.91 ] 現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません ってヘルプに書いてあるから、そういう仕様だとしか
63 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 19:10:26.70 ] ある程度割り切りも必要だけど、 何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。
64 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 19:33:44.95 ] 調べれば仕様だって事はすぐわかるんだが、追及なんて全くしてないだろ なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが
65 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 21:27:58.33 ] 一応Currency型があるから。 誰も覚えてなさそうだけどw
66 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 21:29:55.49 ] 57です 59様、ありがとうございます。 てっきり複数列挙してもまとめて型宣言できるものと思っていました。
67 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 22:39:09.50 ] セルにAlt+Enterで改行したデータを ユーザーフォームのTextboxに入れようとしても 改行してくれないんですね。 何かいい方法はないですか?
68 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 22:44:36.80 ] >>67 たぶん MultiLineがFalseになってるだけだと
69 名前:デフォルトの名無しさん mailto:sage [2012/08/25(土) 23:10:05.12 ] >>68 ありがとう!
70 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 03:13:42.98 ] >>63 追求する意味があるものと無いものを見極める能力も無いとダメだよ 何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて 無駄な愚考をしないのは違うからね
71 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 09:14:57.64 ] おまいらが作ったクラスモジュール教えてくれ 使える、別のアプリ専用、面白い、誰得と何でもいいわ
72 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 09:46:58.31 ] >>71 具体性のない質問というかネタクレクレはスレ違い >>2 でも行くかググって漁れ
73 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 19:11:36.33 ] ソート用クラスなら。 並び替えられるデータは数字の入った配列で、 比較メソッドはイベントとして使う側で実装する形。 数字=インデックスとして見れば、どんな内容のソートにでも使える。
74 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:09:08.58 ] 入力データを取り込むのに Dim ttl As String If TypeName(buf) = "String" Then ttl = InputBox("タイトルを入力", title:="タイトル入力", Default:=buf) ←bufは事前にクリップボードからセット Else ttl1 = "" End If と言うのを作ったのですが、これだと1度に1つの文字列しか取り込めません 1つのダイアログを表示して入力箇所を2つ表示し 同時に2つの文字列を取り込む場合どうすればよいのでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:19:45.24 ] ユーザーフォーム使えば良いだけだと思うよ
76 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:40:00.07 ] 使う方が嫌じゃなければカンマで区切るとか
77 名前:デフォルトの名無しさん mailto:sage [2012/08/26(日) 23:54:40.85 ] あとはforで二回まわすとか? ユーザーフォームが一番スマートだと思うけどね
78 名前:74 mailto:sage [2012/08/27(月) 00:50:32.74 ] ユーザーフォームって本を買ってきてVBを独学したときに作った記憶があるな クリップボードから拾わせた文字列を入力の初期値にして 文字列を入力したらVBに取り込んで シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある 同じ内容なんだけど、入力した時期によってキーワードが違っているときとか
79 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 01:07:36.07 ] 解読しづらい文章だな
80 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 21:04:53.28 ] 各セルの文中の最初に「★」がついてるものだけを探して「★」だけを消すのはどうすればよいでしょうか 最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています よろしくお願いします
81 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 21:21:09.13 ] >>80 Range.Findで探して、Mid$関数で消せば良いんじゃないか? その条件ならワイルドカードが使えるし。
82 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 22:37:49.14 ] Selection.Replace What:="★*", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね
83 名前:デフォルトの名無しさん mailto:sage [2012/08/27(月) 23:58:40.21 ] >>80 ↑ので充分だと思うけど もし範囲が決まっているなら Sub test() Dim r As Range For Each r In Range("A1:B5") If r Like "★*" Then r = Replace(r, "★", "", 1, 1) Next r End Sub でもどうだろうか
84 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 00:23:11.36 ] if instr(hoge,"★") = 1 then right(hoge,len(hoge)-1)
85 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 05:54:18.56 ] エクセルでwavファイルを取り込んでmp3で保存することは可能でしょうか?
86 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 06:18:10.50 ] 常識だろw
87 名前:デフォルトの名無しさん [2012/08/28(火) 07:15:53.67 ] >>85 エクセルでやる意味について
88 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 07:30:31.18 ] >>85 世の中広いな
89 名前:桃白白 [2012/08/28(火) 07:31:22.12 ] >>87 エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。
90 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 07:35:55.08 ] >>85 可能だけどスレ違い
91 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 19:27:40.17 ] マクロ1でマクロ2を走らせる時、どちらも同じ変数名を使っているのですが問題ないですか? それぞれのマクロの中で値を指定していれば大丈夫ですよね? 一応動くのですがちょっと不安なので詳しく教えてください
92 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 19:29:55.84 ] 変数にはスコープって概念があってな 大丈夫かどうかはソースみないと何とも言えん
93 名前:デフォルトの名無しさん [2012/08/28(火) 19:44:37.89 ] Public変数を知らなそうなので大丈夫でしゅ
94 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 20:57:27.14 ] ユーザー定義関数の引数にrangeオブジェクトを指定した場合、 その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか? 範囲は固定ではなく任意です。 環境なくて試せません。お願いします
95 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 21:15:15.96 ] 軽くって? 配列に移し替える時にループ使うから意味ないと思うけど
96 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 21:47:07.44 ] >>95 失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。 たしかにループしたら効果半減ですね…
97 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:13:29.80 ] ソートの質問です Sheet1が A B C 1あ い う 2か き く 3さ し す となっていて Sheet2で関連度の表を作っていて A B C 1 さ し す 2さ 2 0 1 3し0 2 1 4す1 1 2 としています これを,Sheet1でセルを選択した時に,Sheet2の関連度を呼び出してソートするのはどのように書けばいいでしょうか 例えば,B3[し]を選択したら,Sheet2で[し]をみると関連のある順に[し][す][さ]なので Sheet1全体を A B C 1い う あ 2き く か 3し す さ と並べ替えたいのです また,このようなソートはどのようにググればやり方が出てきますか?
98 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:43:26.96 ] 自力で関数を書く
99 名前:デフォルトの名無しさん mailto:sage [2012/08/28(火) 22:46:56.48 ] >>97 Worksheet_SelectionChangeでググってみたらどう?
100 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 00:56:26.02 ] >>94-96 Variant型変数にRangeの値を代入するならループなんて不要 ためしにこんなん書いてみたらTest1よりTest2のほうが10倍以上速かった Sub Test1() Dim I&, J&, T As Date, R As Range T = Now Set R = Cells(1, 1).Resize(65535, 100) For I = 1 To 65535 For J = 1 To 100 R.Cells(I, J) = I + J Next J Next I Set R = Nothing T = Now - T Cells(1, 1) = Format(T, "hh:mm:ss") End Sub Sub Test2() Dim I&, J&, T As Date, R As Range, V As Variant T = Now Set R = Cells(1, 1).Resize(65535, 100) V = R For I = 1 To 65535 For J = 1 To 100 V(I, J) = I + J Next J Next I R = V Set R = Nothing T = Now - T Cells(1, 1) = Format(T, "hh:mm:ss") End Sub