2012年09月プログラム7: Excel VBA 質問スレ Part26 (717)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Rubyについて(アンチ専用) Part004 (747)
Borland Developer Studio 2006 No.13 (268)
C#, C♯, C#相談室 Part76 (831)
くだすれDelphi(超初心者用)その54 (902)
くだすれDelphi(超初心者用)その54 (902)
NetBeans Part6 (864)
Excel VBA 質問スレ Part26
1 :2012/08/19 〜 最終レス :2012/11/02 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 http://toro.2ch.net/test/read.cgi/tech/1341722983/
2 : 関連スレ: VBAなんでも質問スレ http://toro.2ch.net/test/read.cgi/tech/1342087380/
3 : MsgBox ">>1 乙", vbAlert しかしWin8でもVB6サポートされるとか やっぱ当分VB系は安泰だなぁ
4 : 閉じたままのBook内のデータを参照するにはどうしたらいいですか? そして閉じたぱぱのBook内のデータをオートフィルタすることもできたりしますか?
5 : パパやママのことは、直接本人(両親)に相談してください というのはさて置き、閉じたままと言っても、当然本当に閉じたままでは 何も出来るわけが無いので、「閉じたまま=GUI上で開かず」と解釈すると ExcelのCOMインスタンスを作ってやってそれで開けばいいだけ 後の操作は普通に開いてるブックやシートと全く同じ GUI上には表示せずに、裏で開いた状態でなんでも出来る
6 : >>4 どうしてググろうと思わないわけ?
7 : http://prt.iza.ne.jp/images/news/20120819/502425_c450.jpg 雷でよく見る実にわかりにくい図のことで質問です。 濃いピンクが安全だということらしいけど それより内側は危険であり、さらにそれより外側も危険という認識で合ってますか?
8 : どこの誤爆だw
9 : ExcelVBAで Outlookのテンプレートの機能をプログラミングをしたいのですが その方法を教えてくださぃ。 Outlookのテンプレート機能を使わないのは メールの本文中にその当日の「日付」を使ったり Excelのセルに用意したデータをメールの本文に使いたいからです。
10 : outlookのvbaでやれ
11 : みんなおはよう >>7 合ってると思うよ
12 : モジュル先頭で宣言する変数はそのモジュル全体で使えるとのことですが マクロ実行後も値はそのままですか? 次回にマクロ実行したときは値はそのぱぱ残ってる値に加算されますか?
13 : >>12 その変数がクリアされなければ残ってる。 いつクリアされるのかは、明らかではない。 クリアされて困るなら、シートに保存すべし。 詳しくは、こことか参照。 http://www.moug.net/tech/exvba/0150116.html
14 : >>5 COMインスタンスとはなんでしょぅか? >>13 びっくりですね。 これからはモジュル先頭で変数は宣言しないことにしました。
15 : >>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 : >>15 では無いが よく解らなかったらとりあえずシートに残して使う時だけ拾うようにしとけば良いんでねーの 解ったら自分で直せる訳だし COMはググれとしか。多分意識しないでも使ってるんだろうけど。
17 : ユーザーフォーム表示してると表示されてる間はまずクリアされないよ
18 : ユーザーフォームを表示している時に 別のブックを開いてアクティブにするにはどうしたらいい?
19 : 元のブック.ユーザフォーム.Activate
20 : ありゃ? 元のブックのユーザフォーム.を開くには 元のブック.ユーザフォーム.Showでできないのはどうして? >>18 単に「別ブック.Activate」でいいじゃん。
21 : >>20 マクロから開くのではなくて、 普通にフォルダからダブルクリックで開いたときに アクティブになるようにしたいのです。
22 : >>21 したいのならしろよ。
23 : 他ブックのFormをActivateするにはどうしたらいいですか?
24 : 荒らすなよ
25 : >>21 マクロ使わないなら、スレ違いだからどっか行って。
26 : >>25 スレ違いですか? 元々開いてるユーザーフォームのあるブックの マクロで設定できないかと思ったんですが
27 : thisworkbook: private sub workbook_open() userform1.show end sub
28 : 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 : >>28 ActiveSheet.Cells(1, num).Select にしてみたら? あと、Withとか使うと楽かもよ
30 : >>28 numが定義されてないんじゃね
31 : >>30
32 : >>31 やめて!桃白白にむやみにリンクを張らないで! 定義のエラーっていってたから定義されてないんじゃねって桃白白考えたの Cellsはオブジェクトが指定されなかったらアクティブワークブックのアクティブシート を返しちゃうだろ WorksheetsほげほげActivateでアクティブシートが選択されてんだから ActiveSheetってつけなくてもいんじゃね
33 : フォフォフォ… ∧ ∧ |≡V≡| |O(\)O| (V)(゚Д゚)(V) ヽ三i三ソ (/ \) ∪"∪
34 : フォッフォッフォッ (V)∧_∧(V) ヽ(・ω・)ノ / / ノ ̄ゝ フォッフォッフォッフォッフォッ (V)∧_∧(V) ヽ( )ノ / / .....ノ ̄ゝ
35 : マクロを頻繁に使ってたらPCが非常に重くなり、Excelの超基本操作のセル移動でさえ2-3秒かかることがあります(通常は一瞬)。 仕事で使ってるのでAM9からPM6までずっとExcelは立ち上げたままです。 マクロが原因なのは間違いないと思います。 軽くするにはどうしたらいいでしょうか?
36 : >>35 マクロが原因だということまで特定できてるなら そのマクロのバグを修正しろよ・・・
37 : >>36 そんなこといわずに あなたが上級者なら よく初心者が犯しがちな メモリーを消費したままになる良くないコードを予想し それに対しての対策を指示してあげたらどうです?
38 : >>37 エスパーしたらいいじゃない! 教えてくれたらいいじゃない! ってか じゃあ桃白白が教えてあげちゃう グローバル変数使うのやめな これで100%解決する 桃白白に感謝しちゃったらいいじゃない
39 : 残念ながら白桃には感謝できん グローバル変数なんて野蛮なものは使ってないからだ
40 : >>39 いいやお前はグローバル変数を使っている 使っていないと思い込んでいるだけだ 桃白白は上級者だがお前は初心者だ 初心者は上級者の言うことを素直に聞くべきだ お前はグローバル変数を使っている お前はグローバル変数を使っている 目を閉じて反芻しろ
41 : >>40 のび太のくせに生意気だ
42 : VBA触り始めて数日の初歩的な質問ですみません。 環境はWindows7、Excel2007です。 ユーザーフォーム上のテキストボックスに セルをリンクさせたいのですが、テキストボックスのプロパティの Text欄、Value欄に「=Sheet1!A1」と入れても「」内の文字列が そのまま表示されてしまいます。 Excelのシート上のテキストボックスで同じ操作をすると そちらはきちんとセルがリンクされるのですが…。
43 : >>42 ユーザーフォームのテキストボックスなら 「=Sheet1!A1」を入れるのはControlSource
44 : >>35 エラーメッセージとか出ないの? Excel2007だとこんなバグもあるみたいだけど http://support.microsoft.com/kb/971594/ja
45 : >>43 おおおおお!出来た! これでとりあえず形だけは完成しました。 ありがとうございます
46 : >>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 : >>46 各コマンドボタンのクリックイベントに Sheet2.Cells(1,1) = "= SUM(Sheet1!C:C)" って入れといたらどうですか? あと、On/Offの2値を扱いたいなら コマンドボタンよりトグルボタンのほうが良くないですか?
48 : >>46 ,47 まずControlSource使うのやめて、 各ボタンのクリックイベントに、TextBox1.Text = Sheet2.Range("A1").Valueとか書くのが正解だろ (つかそう書いたサブルーチン呼べ) というかまずボタンを重ねて配置するとか馬鹿なことをやめろよ
49 : 埋め込みグラフの目盛り線を選択したいのですが、エラーになってしまいます。 ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select どこを直せばいいですか。
50 : シートに挿入したチェックボックスが消せません。 どこを直せばいいのですか。 Activesheet.Shapes.Delete
51 : >>49 なんというエラーが出る?桃白白にもわかりそうなエラー? わかりそうなやつだったら答えちゃうけど
52 : >>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 : >>47 >>48 役割はトグル以外の何物でもないのですが、 クリックすると白黒画像からカラーに変わるギミックを どうしてもやりたくて、方法がわからずこのような原始的な方法を取りました。 各ボタンに記述してみます。ありがとうございました
54 : >>49 選択しようとするからじゃないの? ActiveSheet.ChartObjects(1).Activate
55 : >>54 ActiveSheet.ChartObjects(1).Activate ActiveSheet.ChartObjects(1).Chart.Axes(xlValue).MajorGridlines.Select できましたwありがとうございます
56 : >>55 そんなの桃白白認めない
57 : 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 : >>57 ちゃんと宣言されてないよ
59 : 初心者がよくハマるやつだな 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 : 初心者じゃ無いつもりだけど未だに分からないのがdecimal。 なんで宣言出来ないんだ??
61 : >>60 仕様に対して「なんで」って言い出したらキリがない
62 : 現在、10 進型はバリアント型 (Variant) の内部処理形式でのみ使用できます。変数を 10 進型として宣言することはできません ってヘルプに書いてあるから、そういう仕様だとしか
63 : ある程度割り切りも必要だけど、 何事にも疑問を持って追求しようとする姿勢が無いとダメだよ。
64 : 調べれば仕様だって事はすぐわかるんだが、追及なんて全くしてないだろ なんでそういう仕様なのか考えるのはまだ意味があるかもしれんが
65 : 一応Currency型があるから。 誰も覚えてなさそうだけどw
66 : 57です 59様、ありがとうございます。 てっきり複数列挙してもまとめて型宣言できるものと思っていました。
67 : セルにAlt+Enterで改行したデータを ユーザーフォームのTextboxに入れようとしても 改行してくれないんですね。 何かいい方法はないですか?
68 : >>67 たぶん MultiLineがFalseになってるだけだと
69 : >>68 ありがとう!
70 : >>63 追求する意味があるものと無いものを見極める能力も無いとダメだよ 何も解ってない状態で割り切って諦めるのと、追求する意味がないことを見極めて 無駄な愚考をしないのは違うからね
71 : おまいらが作ったクラスモジュール教えてくれ 使える、別のアプリ専用、面白い、誰得と何でもいいわ
72 : >>71 具体性のない質問というかネタクレクレはスレ違い >>2 でも行くかググって漁れ
73 : ソート用クラスなら。 並び替えられるデータは数字の入った配列で、 比較メソッドはイベントとして使う側で実装する形。 数字=インデックスとして見れば、どんな内容のソートにでも使える。
74 : 入力データを取り込むのに 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 : ユーザーフォーム使えば良いだけだと思うよ
76 : 使う方が嫌じゃなければカンマで区切るとか
77 : あとはforで二回まわすとか? ユーザーフォームが一番スマートだと思うけどね
78 : ユーザーフォームって本を買ってきてVBを独学したときに作った記憶があるな クリップボードから拾わせた文字列を入力の初期値にして 文字列を入力したらVBに取り込んで シートのフィルターの指定フィールドで抽出させるというのを作ったんだけど やっぱり複数の文字列で同時にフィルターを掛けたいときが時々ある 同じ内容なんだけど、入力した時期によってキーワードが違っているときとか
79 : 解読しづらい文章だな
80 : 各セルの文中の最初に「★」がついてるものだけを探して「★」だけを消すのはどうすればよいでしょうか 最初でないところ(文中)にも「★」が出てくることがあるので検索して丸ごと置換というわけにもいかず困っています よろしくお願いします
81 : >>80 Range.Findで探して、Mid$関数で消せば良いんじゃないか? その条件ならワイルドカードが使えるし。
82 : Selection.Replace What:="★*", Replacement:="", LookAt:=xlWhole, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False たんに全体一致で"★*"を""で置き換えるだけだが。VBAいらね
83 : >>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 : if instr(hoge,"★") = 1 then right(hoge,len(hoge)-1)
85 : エクセルでwavファイルを取り込んでmp3で保存することは可能でしょうか?
86 : 常識だろw
87 : >>85 エクセルでやる意味について
88 : >>85 世の中広いな
89 : >>87 エクセルはみんなのツールだ。フロントエンドをこしらえるのならなかなかいんじゃないか。
90 : >>85 可能だけどスレ違い
91 : マクロ1でマクロ2を走らせる時、どちらも同じ変数名を使っているのですが問題ないですか? それぞれのマクロの中で値を指定していれば大丈夫ですよね? 一応動くのですがちょっと不安なので詳しく教えてください
92 : 変数にはスコープって概念があってな 大丈夫かどうかはソースみないと何とも言えん
93 : Public変数を知らなそうなので大丈夫でしゅ
94 : ユーザー定義関数の引数にrangeオブジェクトを指定した場合、 その値が数値の場合は配列に入れ直した方が処理は軽くなるのですか? 範囲は固定ではなく任意です。 環境なくて試せません。お願いします
95 : 軽くって? 配列に移し替える時にループ使うから意味ないと思うけど
96 : >>95 失礼しました、シートから関数を直接呼び出すと挙動が重かったので軽くとかきました。 たしかにループしたら効果半減ですね…
97 : ソートの質問です 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 : 自力で関数を書く
99 : >>97 Worksheet_SelectionChangeでググってみたらどう?
100 : >>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
101 : >>96 ユーザー定義だとどう書いても重いよね
102 : >>100 ありがとうございます。 引数をvariantにしてしまえばいいのですかね。 試してみます。 >>101 エクセル使う人は、直感的使いたいようで。 配列数式とか駆使して挙動みながら無理のない範囲で作るしかないですよね。
103 : >>97 Friendpaste - SortWithForeinKey https://friendpaste.com/2SD94Big6C5rrUcyFYuphe 桃白白が全力で実装したから試してみて
104 : VBA勉強して2日目のド初心者です http://www.dotup.org/uploda/www.dotup.org3367663.jpg 画像のように、2ページに分かれてそれぞれテキストボックスオブジェクトが2つ有り 上部のボタンを押すと各テキストをテキストファイルとして保存する という処理を作りたいのですが 1ページだけなら strREC = ActiveSheet.Shapes.Range(Array("Text Box 7")).TextFrame.Characters.Text Print #intFreeFile, strREC という風にして実装できたのですが、 2ページ目にあるテキストボックスオブジェクトを指定する方法が分かりません。 やり方のヒントを教えて下さい。
105 : ド素人すぎてクラクラするなw
106 : そんなこと言うくらいなら教えてあげなよ
107 : for eachで回せばいいんだよ
108 : >>104 画像ではText Box 7って2ページ目のテキストボックスなんでない? ページ変わってもテキストボックス取得する方法は変わらんだろ テキストボックスを選択したら左上にテキストボックスの名前が表示されるから、そこに桃白白と入力して ActiveSheet.Shapes("桃白白").TextFrame.Characters.Textでいけるっしょ
109 : 対象のブックが開いているか調べるのにはどうしたらいいですか? もし、開いていたらそのままシートの内容をコピーして、 開いていなかったら、開いてコピー後、対象ブックを閉じる というのをやりたいです。
110 : 馬鹿には無理
111 : >>109 For Eachでぐーるぐる Sub TestFindWorkbook() Dim book As Workbook Set book = FindWorkbook("C:\Users\a\Documents\桃白白.xlsm") : End Sub Function FindWorkbook(ByVal fullName As String) As Workbook Dim w As Workbook For Each w In Excel.Workbooks If (w.fullName = fullName) Then Set FindWorkbook = w Exit Function End If Next Set FindWorkbook = Nothing End Function
112 : Windows XP / Excel 2003 環境にて質問です。 A.xls が直接開かれたか、他ブック(B.xls、C.xls、D.xls)から VBA-Workbooks.Openで開かれたかを A.xls側から判断するのに適した方法ご教示願います。 今現在の方法としては、AにWorkbook_Open時に開いているブック名を調べ、 B、C、Dに該当するファイル名が開かれたら、他ブックより開かれた。と判定させています。 (偶然ですが>109-111さんの流れのようなもの) ただしこの場合だとAを直接開く際、Bが既に起動中でも該当してしまいます。 条件として個人用マクロは使用せずにてクリアしたく、よろしくお願いします。
113 : 馬鹿には無理
114 : Auto_Open が走るかどうかで判定できる気がする
115 : >>112 A.xls側が判断するタイミングはいつ?いつでも?
116 : >>112 他ブックからオープンしたときは A.xlsのどこか任意のセルにその呼び出し元を記述させるようにしたら良いんでない? たとえばB.xlsからオープンしたら Workbooks.open(A.xls) Activeworkbook.sheets(1).cells(1,1)="B.xls" みたいに
117 : http://www.officiallyjd.com/wp-content/uploads/2012/06/20120618_kinashi_15.jpg
118 : >>112 http://www.moug.net/tech/exvba/0060076.html これ参考にならないかな?
119 : 質問です 変数 = A1.value A1のセルには、文字列helpme となっているところを A1にhelp A2にme としたとき、 変数= なんて.value書けばいいですか?
120 : range("a1").value & range("a2).value ってことか?
121 : >>119 質問するならちゃんとしたコードで書いてよ 普通に考えて 変数 = A1.value は「セルA1の値を変数に代入する」という意味のコードとしては まともなコードとはいえない これが「セルA1の値を変数に代入する」という意味のコードとして成立するためには 表記中の「A1」が「セルA1を意味するオブジェクト変数」である必要があるけど それは>>119 の質問内容からは確定できない ちゃんと動作するコードとして書くなら 変数 = Cells("A1").Value みたいに書いてないとおかしい で、そういう意味であるなら 変数 = Cells("A1").Value & Cells("A2").Value とすれば要求を満たせる
122 : もしくはこうか Range("A2") = Right(Range("A1"), 2) Range("A1") = Left(Range("A1"), 4)
123 : >>122 それは意味が違うんじゃない?
124 : お前ら相変わらずエスパーだな俺には何言ってるのかわからん
125 : >>124 >>119 は意味分からんでもそれへの回答で理解できただろ
126 : >>115 Aが呼び出されて直後の必要があります。 Workbook_Open起動時に本来やるべき処理があって、 それを実行する条件として、BCDから開かれたときのみとしたい。 という感じです。(直接起動時は実行したくない) >>116 ちょうど↑の内容に絡む分ですが、オープンした後だと 分岐条件作る前にAのWorkbook_Openが走ってしまうのでダメでした。 >>118 読み取り専用に関する内容でした。 少し今回の件とは異なるように見受けられました。 >>115-118 ありがとうございました。 何か他の手を考えてみようと思います。 ってレス書いているホント今。思い浮かびました。 >116の内容をAじゃなく、開きに行くブックBCD自身にすればいいのですね。 Aを開く処理時に自ブックのCells(1,1)="flag"として Aが開いたらCells(1,1)=""にする。 AからはBCDの存在調査じゃなく、BCD存在調査後、cells1,1の値を調べさせればいいのですね。 if Cells(1,1)="flag" then マクロから起動。 else 自己起動。見たいに。 どうもありがとうございました。
127 : >>120 これでできますた!!!ありがとう!
128 : こんにちは!質問です! エクセルファイルを開いている日(毎日)からみて次の月曜日の日付を取得するにはどうすればいいですか? つまり火曜日に開いても木曜日に開いても来週の月曜日の日付を表示し、来週には再来週の日付を表示するということです。
129 : >>128 =TODAY()+9-WEEKDAY(TODAY()) 月曜日に開いた場合の処理が指示されていないから、そこはつけたしてくだしあ。
130 : name消し漏れ+ 日曜日の判定も必要ですな。>129だと不完全です。 WEEKDAY(TODAY()) = 0と1のとき分岐してください。
131 : >>126 >>114 はダメだったのか?
132 : セルに文字としてプラスの記号入れ方教えてください。
133 : >>132 全角文字で
134 : ありがとうございます
135 : >>130 これってどういう意味?
136 : 多分解決しますた
137 : >>131 (>>114 ) 初めて知りました。 できそうですね。 ありがとうございます。
138 : 選択セルの日付が今日を過ぎていたら赤文字、でなければ黒文字 をマクロにしようと思い、以下を書いた Dim cell As Range For Each cell In Selection If cell.Value >= Date Then cell.Font.ColorIndex = 3 Else cell.Font.ColorIndex = 1 End Next 実行するとNextに対するForが無いと言われる If〜Endをコメントブロックすると、ループは廻ります、何がいけないのでしょうか?
139 : ×End ○End If
140 : >>138 end じゃなく end ifでは?
141 : >>138 最後から2行目の「End」は「End If」でしょ。
142 : あっ!ミスってた 有り難うみんな
143 : ここって資格試験について質問しても大丈夫でしょうか? 公式テキストの解答で1つ理解できないものがありまして・・・。
144 : 既に終った試験だとしても、出題内容をこういうところで漏らすことが 非常識な行動じゃないと思えるほどのバカなら好きにしたらいいさ。
145 : >>144 いや、実際の試験では無くて公式テキストのサンプル問題です。 ちょっと理屈が良く分からない部分がありまして。
146 : 何でも良いから晴れよ
147 : 福沢諭吉「脱亜論」 1885年3月16日 時事新報 日本の不幸は中国と朝鮮だ。 この二国の人々も日本人と同じく漢字文化圏に属し、同じ古典を共有しているが、 もともと人種的に異なるのか、教育に差があるのか、 日本との精神的隔たりはあまりにも大きい。 地球規模で情報が行き来する時代にあって、近代文明や国際法について知りながら、 過去に拘り続ける中国・朝鮮の精神は千年前と違わない。 国際的な紛争の場面でも「悪いのはお前の方だ」と開き直って恥じることもない。 もはや、この二国が国際的な常識を身につけることを期待してはならない。 「東アジア共同体」の一員として その繁栄に与ってくれるなどという幻想は捨てるべきである。 日本は、大陸や半島との関係を絶ち、 欧米と共に進まなければならない。 ただ隣国だからという理由だけで特別な感情を持って接してはならない。 この二国に対しても、国際的な常識に従い、国際法に則って接すればよい。 悪友の悪事を見逃す者は、共に悪名を逃れ得ない。 私は気持ちにおいては「東アジア」の悪友と絶交するものである。 _,,,,,,__ __,,,__ ィjj)))))))))!!!!!彡ヽ, /ミ/ ,}彡ヘ |ミ{ -‐ ‐ ‐ ‐- {三=| El==; ゚ ''==. |ミミ,| `レfォ、,〉 :rfォ.、, !iル┤ . { `¨ i ・、¨ ´ `{ゞ'} 支那、朝鮮とは . | '`!!^'ヽ .「´ 付き合うなと忠告しておいたのに。。。 ! ,-ニ'¬-、 ,!|,_ . \´?` / ∧ヘ、 __/〉`ー ' ´ / 〉 \ _, ィ´「∧ / / 」¬ー- 、_ -‐ ´ / / ヽ、/ / iヾ ヽ
148 : >>144 公式テキストの問題と解答をまるごとここに書くのならともかく、納得できない一問について ここに書くことのどこに問題があるのか?
149 : 引用の範疇なら問題ないだろ VBAの設問なのか? 何だったら桃白白がお答えしちゃうけど? 貼っちゃいなよ
150 : >>145 気になるから貼ってくれよ
151 : 質問です。環境はwindows XP , Excel2003です エクセルファイルをメールで送信するコード、つまり Application.Dialogs(xlDialogSendMail).Show を使いましてメールを送信する際、引数の"Arg1"つまり「メール宛先」に 複数人のアドレスを入れる関係上、宛先文字列が256文字を超えてしまいます。 255文字以内に収めれば、上手くメーラーが起動してメール送信準備が されるのですが、256文字を超えると、エラーが出るわけでもなく ただメールが立ち上がらないという状態になります。 対策をする前に、なぜここで256文字を超えたらダメなのか、を一応 知っておきたいです。どなたか、知っていたら教えてください!
152 : >>151 容量的な問題255バイトまで
153 : ExcelVBAでLifeGameを作った( https://www.dropbox.com/s/kntdvpijtpdje90/LifeGame.xlsm ) のですが、10世代ぐらいループさせるとExcelが固まります 何が原因か教えていただけませんか? Windows 7 Ult x64、Excel 2010です
154 : 多量のテーブルデータがあったとして、 ワークシートとデータベースって どっちを使おうっていう判断基準を教えてください ファイルサイズを考えて、どちらも外部ファイルにデータを置くとした場合。
155 : >>154 具体例を挙げてくれれば助言はできるけど そんなもん一概に言えないよ
156 : データ数が1万レコード以上ある時はアクセスを使うべき
157 : >>155 1000×3ぐらいの数値テーブルが、数十個あって ランダムな場所を幾度も読み込んで計算するような感じです 速度が求められます シートにおさまるんだけど、どちらがいいのかな〜と。
158 : ちなみに、今はワークシートのデータをdllに投げて、処理して値を受け取るようにしているんだけど、 配布やら設定やらの問題でvbaで完結させたい。
159 : アクセスじゃなくてエクセルでdbやってみりゃいいじゃん
160 : メモリに乗りきらないとか、ワークシートに収まらないほどのデータがあるならDB それ以外なら好きにしろ
161 : >>157 その程度のデータ量なら配列に一気に読み込んでから計算するのが一番処理が速い
162 : >>153 スリープのあとにDoEventsを呼ぶようにしたら 10000回ループしても問題なかったよ Call VBA.Interaction.DoEvents 理屈は知らん、寝るのに忙しくて表示を更新できません的なことなんじゃね
163 : 何かというと配列云々をいうアホがいるがそれだけじゃまったく不十分 アルゴリズムの方が大事だ
164 : アルゴリズムの方も大事だ、だろ シートとのやり取りのコストも、これはこれで馬鹿にならないよ。 >>153 x64Win8+Excel2013で動かしてみたけど固まりはしないな。 ただ、ESCキーでの実行中断が何故か効かなくなった。
165 : >>162 固まらなくなりました。ありがとうございます ちょっと理屈調べてみたいと思います >>164 環境にもよるみたいですね。テストありがとうございました
166 : >>153 余計なお世話かも知れないが、 プログラムが動作するしない以前の問題として 変数の宣言が間違ってる。 dim a,b as integer だと、aがVariant型、bがInteger型になる。 あと、変数名間違ってるのが数カ所あった。 Option Expricitで変数の宣言を強制する癖をつけた方が良いと思う。
167 : 綴り間違えた ×Expricit ○Explicit
168 : これは恥ずかしい。
169 : >>152 ありがとうございます。その255バイトまでっていうのが 何の仕様なのかが、どうも掴めなくて気持ち悪いんです。 変数の型はバリアントにしているので、変数の型によって255バイト っていう制限がかかるわけじゃないし Application.Dialogs(xlDialogSendMail).Show の引数は255バイト までと決まっている(仕様)、ということなんでしょうか?
170 : >>169 メールのtoフィールドが255バイト以下ってのはRFCで決まってたはず それ以上送りたい場合はtoフィールド自体の数を増やせばいいんだけど、 受け取った側から見るとあんまり気分の良い物じゃないのでBCCなどを使った方がいい
171 : >>170 マジで!? メールアドレスの最大の長さが255文字でTOが複数のアドレスを含むことが できるとするなら理屈としてはTOは255文字以上を許容しないといけないんじゃね? >>151 配列でアドレスを指定できるんじゃね? Application.Dialogs(xlDialogSendMail).Show Array("桃白白さん", "ブルマさん") みたいにして
172 : >>166 まじかよVBA糞だな首吊ってきます
173 : >>169 自作鯖ならsendmailmaxなんちゃらみたいな設定がたぶんhtod.confとかにあると 思ったけど to Cc Bccでの上限数はあまり変わらないんじゃないか
174 : >>172 VBAがというか大本のVBがそういう仕様だからなぁ つか知らなきゃそう書いちゃうよな
175 : 質問です。 For shapeCounter = 0 To .Shapes.Count --- (※) Dim tempShape As Shape Set tempShape = mySheet.Shapes(shapeCounter) (略) Next このようにShapeオブジェクトを取得していたのですが、 別のマシンで動作させると3行目で停止してしまいます。 そこで、(※)を For shapeCounter = 1 To .Shapes.Count + 1 に変えると正常に動作しました。 officeのバージョンによってこのような事が起こるのでしょうか? もしそうだとしたらどこかにその情報のソースは無いでしょうか?
176 : ExcelのVBAについて学ぼうと思っています。 まだまだ初心者なので、VBAについてお詳しい方、 ExcelのVBAでのテーブル作成方法を教えてください。
177 : ↑入力項目は@入力年月日A転出入りフラグ1、転入2、転出(選択すると自動的にカウントアップ)B氏名C新住所D性別 E年齢F生年月日F職業G男性人口±H女性人口±I全体の人口±といったところです。 このデーターを格納し帳票に飛ばしカウントアップしてデイリー分の男性、女性の転出、転入を出力データとしてまとめ 総人口数を求めるようにしたいのですが。
178 : 馬鹿には無理
179 : >>175 Excel 2007 で Shapes オブジェクトのインデックスに不正な値 0 を指定してもエラーにならない http://support.microsoft.com/kb/2699812/ja これかな。 For Toでぐるぐるするなら For shapeCount = 1 To .Shapes.Count にしないと0からCountまでぐるぐるしたらCount + 1のShapeが存在することになっちゃう。 Shapesオブジェクトの実装はたぶん線形リストで 序数が大きくなるほどアクセスするのに時間がかかるから For Eachでぐるぐるしたほうがいいよ。 For Each tempShape In .Shapes Next
180 : >>176 データベースがメインになるんなら Accessでやっちゃった方がよくね?
181 : access高いから避けたい
182 : >>181 データベースに何を使うかは決まってんの? MDB?
183 : PostgreSQLが良い
184 : >>183 ゾウさんのやつな、かっけーよな
185 : 教えて下さい。 excel vba でIE object のコントロールで ajaxを起動できますか? fireeventでjavascriptはわかったのですが selectにonclickがなくajaxでload window しているものがありどう呼び出せばよいか 悩んでます
186 : ★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で出来ることは全てスレ違いだと思ってください。
187 : 重ねたバケツが抜けないのですが、何か良い方法はあるでしょうか?
188 : 外側のバケツのみ熱します
189 : どうやって熱しますか?
190 : 油を注いで熱します
191 : >>185 的外れかもしれないけどブックマークレットで呼ぶとか? http://shokai.org/blog/archives/1234
192 : >>177 DAOとかADOとかでExcelをRDBみたいにSQLで扱えるから そういう感じでやれば良いんでね やり方はググって好きな方法選んでくれ
193 : みんな聞いて。桃白白のExcelの使用期限が終わりそう、繰り返す、桃白白のExcelの使用期限が終わりそう。
194 : Excelって使用期限が設けられているライセンス体系もあったんか 次買うときはケチらずに無期限ライセンスのを買えよ
195 : >>194 桃白白貧乏だから買えないの。寄付する? するんだったら桃白白はその好意を決して断らない ことをここに誓う用意があるけど?
196 : パソコンをリカバリすればまた体験版が使えるようになるよ
197 : >>195 互換Office使えばタダだよ VBA使えないけど
198 : 貧乏だけど知識が豊富で頭も良くて有用な回答者にならOfficeくらい寄付してもいいが、 貧乏な上に知識も多少の回答は出来るが並以下レベルで、頭の回転も弱い奴となると、 べつに回答者を続けてくれなくても誰も困らないから、Excelの使用期限と共に消えてくれて 一向に構わないな
199 : ∧∧ /⌒ヽ) i三 ∪ ○三 | (/~∪ 三三 三三 三三三
200 : >>199 俺も貧乏だから寄付しないけどタオパイパイ嫌いじゃないよ これからは回答せずに にぎやかしでAA貼ってりゃいいじゃん
201 : 私の声がデムパになって 波になってあなたへ向かってく 私の歌がデムパになって 波になってあなたへ響いてく 私の愛がデムパになって 波になってあなたへ届いてく 私の電子回路が短絡する前に Electric LOVE Electric LOVE (∩ ゚д゚) アーアー この気持ちあなたに届くかな
202 : VBAであるセル範囲をコピペして他のシートに貼り付けたとき 図のオブジェクトがどういうわけかコピペされないんです。 どうすればこの図のオブジェクトも正しくコピペされて他のシートにも表示させるようにできますか?
203 : 馬鹿には無理
204 : >>203 みたいな馬鹿には回答は無理なのは分かりますよ。
205 : ただ図がセル範囲からはみ出してるだけじゃないのか?
206 : いえ、しっかりセル範囲内におさまっています。 列は3、行は20くらい、 図はちょうどど真ん中あたりにあり、1つのセルと同じくらいの大きさなのに。
207 : 2007以降だっけ、図形や画像のオブジェクト仕様が変わってるから その影響じゃね確かめてないけど
208 : >>202 コードも貼らずに・・・VBAでコピペといっても丸ごと・値だけ・図だけ・云々 値だけコピぺのコードになっていないか?
209 : 再現できたよ import os import win32com.client def test_auto_shape(filename): xl = win32com.client.Dispatch('Excel.Application') xl.Visible = True try: book = xl.Workbooks.Open(filename) sheet = book.Worksheets(2) rs = "A10:D20" sheet.Select() sheet.Range(rs).Select() xl.Selection.Copy() sheet = book.Worksheets(1) sheet.Select() sheet.Range(rs).Select() xl.Selection.PasteSpecial() finally: xl.Workbooks.Close() xl.Quit() if __name__ == '__main__': test_auto_shape(os.path.abspath(u'autoshape_copy.xls'))
210 : きもっ
211 : こっちのコードなら図形も正しくコピペされたよ import os import win32com.client def test_auto_shape(filename): xl = win32com.client.Dispatch('Excel.Application') xl.Visible = True try: book = xl.Workbooks.Open(filename) sheet = book.Worksheets(2) rs = "A10:D20" sheet.Range(rs).Copy(book.Worksheets(1).Range(rs)) finally: xl.Workbooks.Close() xl.Quit() if __name__ == '__main__': test_auto_shape(os.path.abspath(u'autoshape_copy.xls'))
212 : Select って恥ずかしいよね
213 : なんでVBAのコードにしないんだろう?
214 : 中二病だから
215 : 覚えたてだからやってみたいだけだろ
216 : 下げ
217 : セルの値が4:07の場合内部データでは0.17152.......となっていて この値だと例え同じ4:07でもFIndでヒットしません。 TimeValueを使おうにもTimeValue(0.17152.......)となってしまいdate型にもできないです。 方法はないでしょうか?
218 : >>217 A1セルに"4:07"を入力してFindでヒットしたけどなんか解釈間違ってる? Dim r As Range Set r = Range("a1").Find("4:07") If Not (r Is Nothing) Then Debug.Print r.Text End If
219 : >>218 Debug.Print Range("a3").Value とすると小数点の値になりませんか?
220 : 訂正a1でした。
221 : > FIndでヒットしません。方法はないでしょうか? これが質問じゃないの?何が質問なの?
222 : 説明不足なので補足します。 エクセルのテキストファイル読み込みでRange("A1":"A10")まで 16:08 16:40 18:23 19:49 20:18 16:08 3:59 15:02 19:49 19:49 の値が入っているとします。 Dim r As Range Set r = Range("A1":"A10").Find(Range("A1")) というコードの場合に Find(Range("A1"))は小数点0.0***********の様な値を検索するようです。 その場合は例え同じ小数点の値でもヒットしません。
223 : >>222 Set r = Range("A1":"A10").Find(Range("A1").text) にするとか
224 : >>223 ででででできました。 ありがとうございました。 .text メモメモ
225 : 省略されてるけど.Valueで検索されてて、.Valueは丸められてるんだな .Textで検索すればいけるんじゃね
226 : 【対応したい環境.】 Windows 2000以降/Excel 2000以降 とあるエクセルファイルのマクロを実行する前に、実行対象PCかを判定する必要があります。 PC名等で細かく指定することでクリアできますが、対象PCがかなり多いため、 以下条件を踏まえて捌こうと考えています。 「マクロを実行したい対象PCにのみ、専用のマクロが入った個人用マクロブックが既に設置されている」 という条件より、もともと設置済みの個人用マクロブックを判定して対象PCとする。 が良いと考えました。 これより、 Onerror goto ERR1 Application.Run "PERSONAL.XLS!判別マクロ名" Hanbetu = 1 ERR1: といった単純な内容で達成したかと思っていたのですが、 PERSONAL.XLSB(最後にB)なるものが存在し、エラーを返される事がわかりました。 どうやら新しいEXCELにはXLSBらしいのですが、 この場合にも対応するにはどうすればいいでしょうか? Onerror goto ERR1 Application.Run "PERSONAL.XLS!判別マクロ名" Hanbetu = 1 ERR1: Onerror goto ERR2 Application.Run "PERSONAL.XLSB!判別マクロ名" Hanbetu = 1 ERR2: もし一つのマクロでONERRORが2個使えたらこんなイメージなのですが、 そのやり方を知らず、回避できませんでした。 ご教示お願いします。
227 : 自己解決しました。 For Each wb In Workbooksと 以下2つは同じであることを利用。 Left(personal.xls,12) Left(personal.xlsb,12) 個人用マクロブックを見つけ、そのときの名前を拾う形でうまくいきました。 For Each wb In Workbooks If LCase(Left(wb.Name, 12)) = "personal.xls" Then PSBname = wb.Name End If Next wb あとは適当に>226を付け足して If PSBname = "" Then GoTo pointA End If On Error GoTo pointA Application.Run PSBname & "!判別マクロ名" Hanbetu = 1 pointA: MsgBox Hanbetu 個人用マクロブックに判別マクロ名があるPCを判定することができました。 ありがとうございました。
228 : へんな質問ですが、営業や事務はExcelVBA以外のプログラミング言語を知っていても仕事には役に立たないものですかね?
229 : >1 ExcelのVBAに関する質問スレです >>228 >ExcelVBA以外のプログラミング言語を スレチです。
230 : >>228 どんな知識だって有って損になるわけじゃないと思うけど、 そもそも営業にVBAの知識って要る? 事務はVBAで自分の業務を改善できるかもしれないけど、 営業ってPC弄るんじゃなくて人と会ってナンボの仕事でしょ?
231 : VBAの設計センスを磨くのにいいサイトとか書籍とかってありませんか? …それとも必要ありませんか… ちなみにwindows7 excel2010です。 始めて1日目なんですが、どうもいわゆる入門書とかサイトとか見てても、 「仕様はそこそこわかった。ではこれからどうするの?」ってなりがちなのですが… みんなは設計書とか書くんですかね?
232 : vbaの問題ではなくプログラミングのアイデアの問題だ w >設計書とか書くんですかね? 全く俺専用のプライベートのものだけど、最近はテキストファイルに予め作るようにしている。 作っている間にあそこをこうしないといけない、あの処理もいるな…などいろいろ出てきたりするんで。
233 : A.xlsにmacroAがあり B.xlsにmacroBがあり A.xlsのmacroA--------------- sub macroA() Workbooks.Open B.xls end sub B.xlsのmacroB--------------- sub Auto_Open() Workbooks(A.xls).close msgbox "確認" end sub こういった異なるブックを呼び出し、 呼び出された側が呼び出したブックをクローズすると、 そこでマクロ止まっちゃいました(msgbox 確認が出ない) どうにかして次の処理に進める方法ありませんか?
234 : >>233 そもそもWorkbooks.Openで開いたら、Auto_Openは実行されなかったはずだが それちゃんと実行されてるか? 単にエラーー出ても無視したいだけなら On Error Resume Next 使え
235 : >>234 ゴメ、ブックオープンマクロだった。 ちなみにやっぱダメみたいね。 エラー出してくれるなら拾えるんだけど、.closeにて閉じた跡、 エラーも出さずにそこで止まる。仕様だね。 さっきB.xlsからVBSへ切り替えて完成した。 どうもありがとう。
236 : >>232 回答ありがとうございます。 少々質問が悪かったのですが 僕が言いたいのは設計センスというか設計法のことについてであり (たとえばジャクソン法だのモジュール設計だのって言葉がネットでは調べればでてきますよね) そういうのは一切なしで、結局はとにかく「プログラムにさせたい動作を日本語で書いて、 それをそのまま言語に落としこめるだけの作業を作成者はするだけだ」ということなんでしょうかね? なんだかたかがVBAに自分は気難しく考えすぎなようも気がします…
237 : ああ、ちょっと日本語が不自由なもんだから質問がわけわからない でも疑問なんでだれかたすけてー
238 : ちょっと質問を整理します。 1まず、VBAの仕様はわかります 2しかしこれからどうすればいいのかわかりません 3モジュール設計とかそういう設計や仕様書の勉強したほうがいいの? という理屈なわけです。
239 : >>235 Application.OnTimeではダメかな
240 : >>238 一番大事なのは、「何」をしたいのかを明確にすることじゃないかな? 例えば VBAを使って「集計レポートの作成」をしたいとか VBAを使って「入力フォームの作成」をしたいとか
241 : >>238 とにかく書いてセンスを養えばいいと思う。 テスト技法なんかは気にした方がいいかな。 人に配ったマクロにバグがあると一気に信用を無くす可能性がある。
242 : >>238 設計しないとコーディングできない 設計書に落とし込むか脳内で完結するかは規模次第 テスト設計も然り
243 : >>239 あーその手があったかぁ。 今回はVBSで逃げたけど、今までApplication.OnTimeって 使ったこと無かったけど、色々過去振り返ると便利に使えそうなシーンざくざく出てきそう。 ちょっと練習がてらに使ってみるかな。
244 : おk >>240 .241.242 氏 回答ありがとうございます。 書いて書いて書きまくれとは、今、小説書いてたりするんですけど クーンツの本でも同じことが書いてありました。結局「やらないことには始まらない」ということですね。 一応テスト設計という言葉も調べてみようと思います。
245 : C♯勉強したら、VBA書けるようになりますか?
246 : >>245 ママのRでも吸ってろ
247 : >>246 桃白白もかわいくてRが大きいママが欲しかったよ。 ぜったいちゅーちゅーしたいよ、ちゅーちゅーとれいんを一緒に踊りたいって 意味だからな、そういうアクティブでカッコいい母親がいればいいってことだからな。
248 : 開発中のブックで下記のコードを書くと二行目のWorksheets(1)に問題があるようで動作しませんが 新規ブックで同じコードを書くと動作します。なぜですか? Worksheets("sheet1").Cells(1, 2).Value = 479 Worksheets(1).Cells(1, 1).Value = 476
249 : >>248 開発中のブックにWorksheets(1)がなくて 新規ブックにWorksheets(1)があるからじゃない?
250 : >>248 Worksheets(1)をSheets(1)に書き換えてみ もしそれで動いたんならインデックス番号1のシートの種類がワークシートじゃないって事
251 : >>248 動作しませんってのは具体的にどういうことなんだ 単にお前が思ってるシート(sheet1)以外のシートに値がセットされてるだけじゃないのか? 試しに MsgBox Worksheets(1).Name を間にいれて何が表示されるかみてみ >>249-250 Worksheetsってワークシートだけのコレクションだと思ったんだが Worksheets("sheet1")があるのにWorksheets(1)が無いなんてこと起きるのか?
252 : 248です。 .Nameで確認したら僕が思っているWorksheetsではなく その左にWorksheetが隠れていたようです。 解決しましたありがとうございました。 どうも一度ウインドウの横幅を細くして左下の右矢印を押して隠した後に 横幅を戻しても隠れたままになるようです。
253 : >>244 書いて書いて書きまくれっていうのも、効率悪い。 一般的に言われるのはこんなところ。 ・1関数1機能 ・1関数は100行以内 ・一文字変数は厳禁(iとかjとかkとか) 言語は違うけど、こんなサイトを参考にできるかと。 Cプログラミング診断室 http://www.kojima-cci.or.jp/fuji/mybooks/cdiag/ あとは、お作法程度だけどこんなのもある。 ハンガリアン記法 http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95
254 : >>251 > Worksheets("sheet1")があるのにWorksheets(1)が無いなんてこと起きるのか? そんなん普通にあるだろ 新規ブックに対してSheet1の左側にグラフシートを追加すれば簡単に再現できる
255 : すみません、質問! OffsetとResizeで範囲?が取得できると思うんですが、この範囲に入ってる 数字の合計を出したい場合、どのように書けばいいですか? Range("A1").Offset(1, 1).Resize(2, 0) ↑たとえばこの範囲に入ってるセルの合計をVBAでもとめたい よろしくおながいします。
256 : Resize(2, 0)はResize(2, 1)と解釈 WorksheetFunction.Sum(Range("A1").Offset(1, 1).Resize(2, 1))
257 : >>256 さん おおお、ありがとうございます! SUMも試したんですが、問題はResizeの引数の側だったとは…。 すません、助かりました。
258 : >>254 再現しないんですが? Worksheetsはワークシートだけのコレクションだから、グラフシートがあっても関係ないんですが Sheets(1)がWorksheets(1)じゃないって状況ならいくらでも存在するがな
259 : 変数を使わずにA1からデータがあるセルまで選択するにはどうすればいいんでしょうか?
260 : 変数を使いたくない理由は?
261 : 使わずにできるならそうしたいなって
262 : >>259 Range("A1", Cells(1, 1).SpecialCells(xlLastCell)).Select
263 : スペシャルセルズってはじめて見た。 同じだけど Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Select
264 : >>262 >>263 できました ありがとうございます
265 : エクセルマクロでさ シートが10ぐらいあって、そのうち5枚だけに以下の作業させたい ・1から10行までで一列目に何も入ってない行を非表示にする これどうしたらいいの? 記録でやってみるんだけど、最初のシートしか非表示にならないんだ
266 : >>265 とりあえずこれ見て考えて Dim i As Integer Dim row As Integer For i = 1 To 5 With Worksheets(i) For row = 10 To 1 Step -1 If .Cells(row, 1).Value = "" Then .Cells(row, 1).EntireRow.Hidden = True End If Next End With Next
267 : >>266 これって右のシートから順に5つに動作する?
268 : 連投ごめん、ワークシートにはそれぞれ予算とかそういう名前がついてるんだ どうしたらいい?
269 : おいおい、>>259 =>>264 なのか? >>259 の問いに対して >>262 は正解だが>>263 は違うぞ
270 : ごめ、間違えてた? 試しても無いんだけど、あってるほうで頼む>262-263
271 : >>268 Dim row As Integer Dim sheetnames Dim sheetname sheetnames = Array("予算", "名前1", "名前2", "名前3", "名前4") For Each sheetname In sheetnames With Worksheets(sheetname) For row = 10 To 1 Step -1 If .Cells(row, 1).Value = "" Then .Cells(row, 1).EntireRow.Hidden = True End If Next End With Next とりあえずこれ理解するまで次の質問禁止な
272 : もうちょっとシンプルに If Cells(r, 1) = "" Then Rows(r).Hidden = True
273 : >>270 >>263 はA列だけしか見てないから、 たとえばB1が最終セルでもそれが反映されない
274 : ご教授願います。 2012/8/23 10:44:24 を秒数に変換する方法を教えてください。
275 : VBAではformatする場合は秒数を使わないのでしょうか?
276 : ある程度使い方調べてから質問しろよカス
277 : >>274 =Int(Range("A1") * 86400 + 0.5)
278 : >>277 ありがとうございます。 >>276 UNIXタイムスタンプという言葉を忘れていました。検索キーワードを変えてみます。 気に障ったみたいですいません。
279 : >>278 すみません。 こちらこそ言い過ぎました。
280 : >>259 >>264 xlLastCellって「使われた最後のセル」であって「データがあるセル」では無いのだが良いのか? 有効データがある最後のセルがほしいのならもう一工夫必要になる。 (一列だけが対象なら>>263 で有効データがある最後のセルが得られる)
281 : 牛R飲みすぎた、気持ち悪い、吐きそう
282 : 使用期限切れで消えるんじゃなかったのかよ TAO PAI PAI 恐らくこのスレ内だけで生じているTPP問題
283 : >>262 A列限定だとして Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Select 昔はこんな回りくどいコード書くやつがいっぱいいたねぇ Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)).Select とできるんだが A列と決まってなければFindメソッドで"*"を後ろから検索するのが普通 その時は変数を使うのが普通だ
284 : アンカーミスったわ 上は>>263 向けね
285 : >>283 そんなめんどいことにならないように、range(hoge).currentregionで使用範囲を特定できる構成にするのがいいよ
286 : >>283 そのコードはレアケースで壱番下までデータで埋まってると失敗する まあ現実的には下まで埋まる前にデータ大杉でExcelが無反応になると思うけど
287 : >>285 俺も>285に賛成だなぁ。
288 : >283
289 : 他を否定、アレンジして主張するもなお粗末な出来。 挙句の果てには >変数を使わず に対し >Findメソッドで >変数を使うのが普通だ なんだろうこの痛い奴・・
290 : OFFICE XPを使用しています。 A列にID、B列に数値が入っており、 IDと数値の関係は1対多になっています。 (A列には複数のIDデータが入っています。) このデータで、各IDの最初の数値だけ必要であり、 それ以外の行を削除したいと考えています。 for nextで最終行からIDのマッO、削除をする VBAを組んだのですが、データ量が多すぎて 処理が時間がかかりすぎる状況です… どなたか改善策のヒントをご教示いただければと思います。
291 : >>290 データが多いって、具体的には何件? VBAなんか使わんでも重複の削除は簡単にできる ttp://office.microsoft.com/ja-jp/excel-help/HA001034626.aspx Office2007以降なら「重複データを削除」ってボタンがあるから、それクリックするだけ どうしてもVBAでやる必要があるんなら、下からDictionaryに突っ込んでけば 自動的に先頭の数値だけが残るけど、とりあえず作ったコード晒してみ?ちょっとの手直しで 劇的にスピードアップする可能性もあるから
292 : >>289 アレンジ? Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)の間違いを正しただけなんだが Cells(Rows.Count, 1).End(xlUp)と同じだもんねぇ いまどきこの程度が分からないやつはあまりいないけどな >>286 知ってるよ
293 : >>292 Cells(Rows.Count, 1).End(xlUp)はアマチュアの書き方 Cells(Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1).Row, 1)と書くのがプロ そんなプロはいねーよと言いたい人もいるだろうが実際にいた
294 : >>290 はい、IDが6万件あっても0.1秒で終わるよ Sub Macro1() Set dic = CreateObject("Scripting.Dictionary") cel = Range("A1:B" & ActiveSheet.UsedRange.End(xlDown).Row).Value For r = 1 To UBound(cel) If Not dic.Exists(cel(r, 1)) Then dic.Add cel(r, 1), cel(r, 2) Next Columns("A:B").Clear Key = dic.keys itm = dic.items For r = 1 To dic.Count Cells(r, 1) = Key(r - 1) Cells(r, 2) = itm(r - 1) Next End Sub
295 : vlookupを使って処理したいのですが、データが多くて時間がかかります。 具体的には、Aシートに氏名と来た日時が入っており(各人何回も来ているとする)、 Bシートには氏名と誕生日が入っています。 各人、誕生日の3日後以前に来た日のデータを削除したいのです。 どうかお知恵をお貸し下さい。
296 : 単純にAシートに、Vlookupより取得した誕生日列を追加して、 =if(来場日<誕生日+3,"削除対象","") とかじゃダメなの?
297 : Excelのマクロって Excel用に便利な関数みたいのを作れるだけで それ以外に使うことって出来る?
298 : >>297 ゲームでもなんでも作れる ttp://www.geocities.jp/excel_game/
299 : >>298 その作ったものを Excel上以外で動かせる?
300 : >>299 無理だと思う VBに移植すれば単独起動も可能になるけど、Excelの機能を使ってる場合は 結局はExcelもインストールしとかないと動かない
301 : >>299 「Excel上以外」というのが、Excelを起動しないで、という意味なら、OLE経由で可能。 詳しくは"windows ole excel"で検索。
302 : Excelインストールしないでも動くの作れないかな
303 : Access使えよ
304 : VisualStudio使えよ タダだよ
305 : Accessもインストールしないと使えないしなぁ
306 : >>304 それが正解っぽい
307 : Excelマクロで作ったゲームをExcelのインストールしてないPCで遊ぶ方法ねぇ・・・
308 : Flash最強説
309 : Flashは開発環境が有料だし、VisualStudioでいいじゃん
310 : Flashはやりたいことばかり実装しててセキュリティとかすっぽり抜けてた 今更直せませんごめんなさいって開発チームが謝ってたろ アップルも嫌がらせだけで外した訳じゃねーぞ半分ぐらいは
311 : AndroidからもFlash終了 そのうちデスクトップからも消えるのは時間の問題 っていうかスレチ
312 : Worksheets("result").Cells(writerow, 2).Formula = "=100*SUMPRODUCT((MOD(ROW(O" & startrow & ":O" & finishrow & "),2)=0)*O" & startrow & ":O" & finishrow & ")/D " & finishrow というコードが、 実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラーです。 と表示されてエラーになってしまいます。 変数自体はちゃんと認識されています。 何が間違っているのかご教示ください。お願いします。
313 : >>312 Dの後ろのスペース
314 : >>313 うわわ、本当だ… ありがとうございました!
315 : いつも参考にさせていただいています。 下記、どうかお助けください>< 現在、エクセルのマトリクス表をテーブルに変換する作業が必要となっており、 私の知識では対応できないため、皆様のお知恵をお借りできないでしょうか。 【イメージ】 (基データ) ABC 1 121 2 222 3 32 ↓↓↓ (変換後) A1 1 A2 2 A3 3 B1 2 B2 2 B3 2 C1 1 C2 2 C3 ※実際には、行・列とも1000近くあります。 良い方法がありましたら、ぜひご教示ください。 [エクセルのバージョン] Excel2007 [OSのバージョン] WindowsXP
316 : セルの指定方法は、worksheets("Sheet1").cells(1, 1) 文字列の長さはlen(buf) ループはfor i = 0 to len(buf) -1 ... loop 文字列のn文字目を1文字取得するのはmid$(buf, n, 1) セルへの設定は、cell.value = hoge
317 : >>315 ttp://www.excel.studio-kazu.jp/kw/20120921172512.html
318 : ユーザー定義関数で例えば Sub Tset() cells(1,2) = CellValue(1, 1) End Sub Sub CellValue(address1 as Long, address2 as Long) cells(address1, address2).value このcells(address1, address2).value値が返るようにするにはどうしたらいいですか?
319 : >>318 Function プロシージャを使う Function CellValue(address1 as Long, address2 as Long) As Variant CellValue = cells(address1, address2).value End Function
320 : A1セルに不定期にデータが入っています。 でーたが入っている行の上に1行挿入したいのですがどうしたらいいでしょうか? For i = 22 To 1 Step -1 If Len(Cells(i, 1).Text) >= 0 Then Rows(i).Insert End If Next i としてみましたが空白行が連続すると余分に挿入されてしまいます。
321 : >>320 If Len(Cells(i, 1).Text) >= 0 Then だと全行がTrueになるような・・・ If Not IsEmpty(Cells(i, 1)) Then にするとか
322 : >>321 ありがとう。 出来ました。
323 : XP SP3? Excel 2003 Excel起動時にPERSONAL.XLSからマクロを実行して時間指定、 指定時間になる度(10:00と11:30とか複数あり)に、 他のアプリケーションを実行していてExcelが隠れていてもExcelを表示させたい 要はタイマーにしたいのですがうまくいきません Workbook.activateではうまくいかず、 CreateobjectならExcelの表示には出来ますが、新たに開いてしまいます 出来れば既に開いているPERSONAL.XLS(シートは非表示ですが)を表示させたいと考えています どなたかググる際のキーワードでもいいので教えてください
324 : >>321 勘違いしてました。 For i = 22 To 1 Step -1 If Len(Cells(i, 1).Text) = 0 Then Else Rows(i).Insert 'i = i - 1 End If Next i で良かったんですね。 でもまた一つ勉強になりました。
325 : >>323 タイマーイベントを仕込みたいって事? でも基本的にそういうスパンの長いものは タスクスケジューラとかで実装するもんだと思う。 あと既存のExcel取得したい時はCreateObjectじゃなくてGetObject という感じでキーワードを散りばめてみたがどうか
326 : >>323 「Excel 最前面」 SetWindowPos()かな?
327 : >>103 スーパー亀ですが実装再開します VBAの新規画面に入力するとEndSubが必要と出るのですがどこが違うのでしょうか
328 : >>327 最初のSubの次の行に入れたらエラーなくなりました しかしどうすれば動くのかわからない…
329 : >>328 Sheet1でしを選択してSortTable関数を実行したらいいよ
330 : >>329 うんともすんともです…orz EndSubを2行目に入れるのはあってますか? 入れないとエラーが出ますが入れても動かないのです
331 : >>330 2行目ってどこの2行目? 桃白白のコードには入れたらまずいよ 1行目には何がある?
332 : >>331 マクロにコピペしていたのでSub test()とかなっちゃってました 新規VBAとして書き込んだらできました ありがとうございます!
333 : >>331 何度もごめんなさい… これって一度動かしたら、動かした後のシートに対して同じ動作はできませんか?
334 : >>333 あ、3行目だけに有効だとわかりました 全行で同じ事やりたいので何とかならないか考えてみます
335 : >>334 関連度がさ・し・す についてしか定義されてないんだから 他の文字では何も起こらないだけでは?
336 : >>335 わお 自分ばかすぎでした逝ってきます 助かりましたありがとうございました
337 : Dictionaryオブジェクトで動的配列のITEMに動的配列を入れる方法を教えてください。 コレクションで下記コードで実行した場合どうも上手くいきません。 For i = 2 To Range("A1").CurrentRegion.Rows.Count - 1 With vArray .Add Item:=Cells(i, 1) .Add Item:=Cells(i + 1, 1) .Add Item:=Cells(i + 2, 1) .Add Item:=Cells(i + 3, 1) .Add Item:=Cells(i + 4, 1) End With dateArray.Add Item:=vArray Next i
338 : Debug.Print Join(dateArray.Item(1))とかDebug.Print Join(dateArray(1))やりましたがエラーになりました。
339 : 検索値と一致する値が連続した複数行にあるとします。 その最初と最後の行のrowsを取得したいのですが、 for nextを使わずに処理する方法があればご教示下さい。 よろしくお願いします。
340 : >>337 めんどくせぇ。 vArrayって何なんだよ。 実行したらどの行でどんなエラーになるんだよ。
341 : 列数-1のループなのに、1セルごとに縦方向に参照してるのは正しいのか?
342 : >>337 ・ソース貼るなら端折るな ・どう上手くいかないのか具体的に書け ・上手くいかないミニマムコードを書いて貼れ
343 : Dictionaryって、keyとitemのペアだよ。 あとJoin()ってなんだよ?
344 : ツッコミどころ満載のコードですいません。 今ミニマムコードで試したら Dim dArray As New Collection With bArray .Add Item:=Cells(1, 1) .Add Item:=Cells(2, 1) End With Debug.Print Join(bArray) どうやらコレクションではjoinは使えないようです。
345 : Dictionaryオブジェクトと動的配列はどこ行ったんだ
346 : ちょっと近所へ買い物へ行ってる
347 : >>339 ttp://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_find.html
348 : >>344 質問内容が変わっちゃったの? とりあえず Option Explicit 書いてみたら?
349 : >>344 どうやらっておまえ・・・・ F1くらい押せよ
350 : Collectionのインスタンスにarrayってつけるのやめません?
351 : コレクションと配列とディクショナリの区別がついてないんだな、きっと
352 : >>337 何がやりたくて何で躓いてるのかよくわからないけど もしかしてUnion使ったら解決するとか
353 : 仕事で売り上げの比率を出さなければならないのですが質問させて下さい。 総売り上げから人件費%経費%など円グラフにするにはどうすればいいですか? 総売り上げが100%です。 宜しくお願いします。
354 : >>353 >わからなければとりあえず「マクロの記録」(Alt, T, M, R) 質問内容が伝わってこないので、もう少し具体的に質問してください 何がやりたくて、現状どんなソースコードを書いていて、どこでどのように行き詰っているのか、とか 丸投げしたいならせめて入力情報と現状のソースが入力されたブックをアップしてください
355 : winXP excel2002 マクロ実行中に手動で他のブックを開くようにするには どういった記述を追加すればよいですか? マクロ実行中に手動で他のブックを開くことができません。 マクロ実行前に他ブックを開いておけば、編集作業はできます。 実行時間が1時間近くなるので困っています。
356 : >>355 実行しているマクロの所々にDoEventsを入れる。 所々というのは、Loop行の前とか、関数呼び出し後とか適当に。
357 : >>355 力業だけど別プロセスでExcelをもう1個起動して作業するという手もあるよ
358 : >>355 OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") これだと開くファイルを自分で選べるけど
359 : 1時間もかかるマクロを実行中のPCで他の作業やるなんて・・・
360 : >>359 いまどきのPCなんて大概マルチスレッド対応なんだから Excel実行中に別の事したって問題ないでしょ
361 : 下記のコードがうまく機能しないで困っています。 nowrow、maxrowは変数で、resultシートの現在の値を検索値とし、 sheet1の2行目から最終行までの範囲で検索し、その4列目の数値を 変数kaiとして求める式です。 kai = Application.WorksheetFunction.VLookup(Worksheets("result").Range("A" & nowrow), Worksheets("sheet1").Range("A2:A" & maxrow), 4, False) ヒントをください。 どうかよろしくお願いします。
362 : 我ながらアホだ・・・ 自己解決しました。
363 : >>362 もしかして "result" ここか?
364 : >Worksheets("sheet1").Range("A2:A" & maxrow) 4列目だと?
365 : VBAを使って Excelのある内容をグラフ化してそのグラフをJPGとして デスクトップに保存したいのですが なんとなく VBAでワークシートにグラフを作成 ↓ そのグラフをアクセサリのペイントに張り付け ↓ JGP形式でデスクトップに保存 を自動でするみたいなのを想像していますが もっと簡単なやり方とかあるのでしょうか? 上記の方法だとペイントがある事が前提とかマシンに依存しすぎなので避けたいです
366 : >>365 excel vba グラフ 画像 保存 とかでググる
367 : >>356 所々にいれてはあるのですが、なかなか起動しですね >>357 、>>358 いいアイデアもらえました。実現できそうです >>359 webアクセス→テキスト整形、貼付なので負荷は重くないです
368 : >>360 負荷的なことを言ってるんじゃなくて別の作業することでPCがフリーズしたりとかすると また最初からマクロ実行しなおしになって時間がかかるなと思っただけ あんま気にしないで
369 : すいません、どなたかご教授下さい。 Sheet1にA列B列C列の3列でできた表があって、C列の数値が10以上ならSheet2にA列B列を表示させたいのですが 関数で表示させるとしたら、どういう関数式になりますか?
370 : ExcelのVBAに関する質問スレです
371 : スレ違いすみません;質問に適当なスレに誘導していただけませんか?
372 : Excel総合相談所 105 http://toro.2ch.net/test/read.cgi/bsoft/1346498940/
373 : >>371 Rもみもみしてくれませんかみたいな Excel総合相談所 105 http://toro.2ch.net/test/read.cgi/bsoft/1346498940/
374 : >>372 >>373 ちんもみは勘弁ですw ありがとうございます、行ってきす。
375 : Rの事R言う奴は大概短小
376 : >>374 二度とくんじゃねえよバーカ
377 : >>373 Excelの期限はもう切れたのか?
378 : >>377 切れた、完全に切れた、もう使えない・・・寄付する?してくれてもいいけど?
379 : >>378 PCリカバリで体験版の使用歴リセットできるよ
380 : >>378 ネット解約してその金でExcel買え みんなハッピーになれる
381 : 無料のオフィスソフトあるだろ。 アレ使え。
382 : ソレはVBAも対応してるのか?
383 : VBAあきらめてVB使えば?無期限完全無料だぞ あと、VBならゴニョゴニョ……
384 : VBが無料と申すか? 10万円以上するんじゃなかったか? ゴニョゴニョとはどういうことか教えれ。
385 : 何年前のはなしだよw てかお前の知ってるVBは死んだ。
386 : Office体験版の期限が切れても、VBからOLE経由でExcelのブックを開くと、あら不思議
387 : あら不思議(藁)
388 : OLE OLE 詐欺
389 : 質問です。 VBA本で有名なこの人ですが http://www.amazon.co.jp/ 立山-秀利/e/B004LA5SL6/ 自分の写真を公開してるということは、自分のことをハンサムで男前でカッコいい部類に入ると思っているからなんでしょうか?
390 : OSとExcelのバージョンは?
391 : >>389 違います。桃白白のほうがイケメンです。
392 : >>391 写真うp
393 : >>392 http://pic.prepics-cdn.com/shomaru/17166204.jpeg
394 : 桃白白と書いた紙を持って撮って
395 : http://www.dotup.org/uploda/www.dotup.org3475059.jpg.html
396 : >>394 桃白白の家庭では小さいころから桃白白と書かかれた紙を持って写真に撮られたら魂抜かれると 教わって育てられる、都市伝説かもしれないけど、迷信かもしれないけど、桃白白は昔の人が 代々語り継いできた言葉を大事にしたい、だからそれは無理だけど、イケメンだろ? ほれるだろ? お前はもう桃白白にほれている
397 : >>396 ExcelVBAと書いた紙を持って撮って
398 : 三つ編みじゃない桃白白なんて誰が認めるか
399 : >>325 ,326 遅くなりましたがレスありがとうございました できました!と書きたかったのですが、 まだ時間がかかりそうです 単純なウィンドウ操作だけではうまくいかない感じで、 APIのスレッドIDとかプロセスIDとか勉強してみようと思います
400 : >>399 画面をとにかく最前面に出すってのなら、SetWindowPosを使った例がExcel VBA 裏ワザ大辞典って本に載ってる
401 : SetWindowPosでもダメだったんですよね うまくいくときもあれば、そうじゃない時もあって 幸い仕事も暇なので、色々勉強します
402 : テキストボックスに現在の時刻+3分先の時刻を表示するにはどうすればいいですか? リアルタイムで進まず、ボタンを押したら2012/10/02 20:10 みたいな感じで表示したいんですが
403 : >>402 =NOW()+"00:03"
404 : >>402 TextBox1.Text = Format(Now() + TimeValue("00:03"), "yyyy/mm/dd hh:mm")
405 : >>401 あんまり上手くいかないようならExcel以外の手も組み合わせると良いと思うよ このスレ的には反則だけどもExcelオンリーじゃなきゃダメってんでもないんでしょ? 勉強なら良いけど、仕事なら手を狭めるのは損だ。
406 : 質問です。テキストボックス1から6まであり、チェックボックスが2つあります。 クリアボタンを押したとき、初期の入力画面に戻したいのですが やり方教えてもらえると助かります お願いいたします
407 : >>406 その「クリアボタン」って何? コマンドボタンかなんかですか? 「初期の入力画面」てのも どういう状態が初期なのか分かりません。 もう少し詳しく説明してください。
408 : >>407 失礼しました。 自分でボタンを作って、そのボタンを押すと、テキストボックス1番から6番に入ってるテキスト情報を削除し、 尚且つ、チェックボックスでチェックが入ってる場合、それをチェックなしの状態にしたいと思ったんですが。 やり方がわからないのでアドバイスいただけると幸いです。
409 : 'ファイルを開く Workbooks.Open "C:\aaa" 'あああシートを選択する Sheets("あああ").Select こういう処理があるのですが どうもファイルをオープンする前にシートを選択する処理が走っていて 当然まだファイルが開く前だからそんなものは無いって言われて 落ちてしまいます 確実にファイルが開いてから次の処理に進ませるために これって対応する場合どういうのがいいのでしょうか?
410 : >>408 Private Sub CommandButton1_Click() TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" CheckBox1.Value = False CheckBox2.Value = False End Sub
411 : >>410 そうじゃなくて、for i=1 to 6みたいな使って行を減らしたいの
412 : >>411 メリットがないのでやめた方がいい
413 : >>411 Private Sub CommandButton1_Click() For Each c In Controls If Left(c.Name, 7) = "TextBox" Then c.Text = "" If Left(c.Name, 8) = "CheckBox" Then c.Value = False Next End Sub
414 : >>411 たった2個じゃ一行も減らない Private Sub CommandButton1_Click() For i = 1 To 6 Controls("TextBox" & i).Text = "" Next End Sub
415 : こういうのって、思い付いたときは良さげに見えるけど、 実際書いてみたら何か読み辛いなあ、で結局元のコードに戻す。 未だにこのパターンで時間を無駄にしてしまう事があるなw
416 : コピペしたらエラー出た テキストボックスのクリアは出来た。ひとまずありがとう。でも CheckBox1.Value = False CheckBox2.Value = False これなんか違うmちあい。Valueじゃないってエラーメッセージが出る。下の2つがチェックボックス1と2なんだけど もしかしてバージョン違うのかな? Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged End Sub Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged End Sub
417 : sp = split("aaa,bbb,ccc",",") これで分割されてspの中に配列としてaaa、bbb,cccが入れられるのですが sp = split("aaa,bbb,ccc",",") sp = split("eee,fff,ggg",",") みたいに一回目に分割させた配列の中に2回目に分割した内容を 追記するような方法ってあるのでしょうか?
418 : 繋いでから纏めて分割したら良いんじゃね?
419 : >>417 str = "aaa,bbb,ccc" & "," & "eee,fff,ggg") sp = split(str , ",")
420 : array = Range("A1:C10000) だとRengeの内容がarrayに格納されるのですが メソッド化して、arrayという変数を引数にして使いたい場合 call aaa(array) funcion aaa(s1 As Object) s1 = Range("A1:C10000) end function だとうまくいきません ご教授ください
421 : >>420 そもそも値を返さないならfunctionである必要がない
422 : Variant
423 : 適当に書いてみる Sub aaa(ByRef s1) s1 = Range("A1:C10000") End Sub
424 : Excel VBAを使って体脂肪率を下げたいのですが、どのような コードを書いたら下がりますか?いい解決方法を教えてください。
425 : >>424 連休中に水しか飲まずにコーディングすれば下がると思うよ
426 : ブラック企業に入って何日も家に帰らずにプログラム書く
427 : >424が体脂肪計に乗ったときだけ分岐して、A=A*0.8で8割に見せる。
428 : 設置したテキストボックスに情報を貼り付ける作業をしてるんですが 最後にたまに半角スペースが入っちゃうことがあって 最後の半角スペースをトリミングする方法ってありますか?
429 : >>428 http://note.phyllo.net/?eid=1106073
430 : >>428 RTrim
431 : textbox1.text.trim() これでいい?
432 : ほんとに半角スペースかそれ改行コードとかじゃないの
433 : __ //:\ / /::::::::\ / /:::::::::::::::\ / . /:::::::::::::::::::::::\ / /::::::::::::::::::::::::::::::::\ / . /:::::::::::::::::::::::::::::::::::::::::\ / /:::::::::::::::::::::::::::::::::::::::::::::::::\ ____ / /:::::::::::::::::::::::::::::::::::::::::::::::::: / ― -\ . /::::::::::::::::::::::::::::::::::::::::::::::::: / (●) (●) 暇だお /::::::::::::::::::::::::::::::::::::::::::::::: / (__人__) \ /::::::::::::::::::::::::::::::::::::::::::::::::: | ` ⌒´ | . /::::::::::::::::::::::::::::::::::::::::::::::::::::: \ / ノ \ /´ ヽ r──| l \ / ̄ ̄ ̄ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. /  ̄ ̄  ̄ ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
434 : ユーザー関数で自身のセルの背景色を変更させたいのですが、 上手く出来ません。(文字色なら変更できた) どなたか、ヒントを頂けないでしょうか? Function Test() Dim MyCell As String MyCell = Application.ThisCell.Address(False, False, xlA1) Range(MyCell).Interior.ColorIndex = 3 ' Range(MyCell).Font.ColorIndex = 3 Test = MyCell End Function
435 : Excelのセルを正方形にして100x100のマスの迷路をつくりたいのですが スタートと出口をそれぞれ左上、右下にし、 必ず出口に行けるルートは一つだけで、 その他は壁をつくり、その壁は罫線で表したいです。 こういうプログラムをつくるにあたり、アルゴリズムはどうすればいいでしょうか? できるだけくわしく教えてください
436 : >>434 できません。 >>435 VBAと関係無いよ。
437 : なんてこった、そもそも無理なのか。 さんざん頭を悩ませたのに…… ありがとう、おかげで諦めがついたよ
438 : 条件付き書式とかでなんとかならない?
439 : 普通にVBA走らせたらええやん SelectionChangeとかで
440 : おおこれは便利そうなコマンドだ、SelectionChange。 知らんかったわ。 ただ、VBA初心者な自分には説明眺めても使い方がvンカンプンなので、 勉強しなおしてきます。 サンクスです。
441 : s2 = Range("A4", "B100") Range("C4", "D100") = s2 配列を使って、これでA4:B100のデータをC4:D100にコピペできますが 元の文字が赤とかセルの色が黄色とかは引き継ぎません これを書式を含めて完全な状態でコピーしたい場合どうすればいいのでしょうあ?
442 : >>441 Pastespecial
443 : >>442 コピーペーストではそれで可能だが 配列の代入では使えないのでは?
444 : >>441 Variant変数を用いる手法ではセルの値だけしか受け渡しされない。 だから書式なども含めてコピーしたいときにはこの方法は使えない。
445 : 事務処理改善でエクセルを使うようになり最近エクセルの虜状態です。 レベルはど素人並ですが、頑張ってみたいプログラムを書いてみようと思い質問させていただきます。 まず1〜5のブックに A1に入力された日付のデータを A2〜C6に落とす というボタン(A)が組まれています 日付入力はブック毎に手入力だったのですが、 新規ブック(以下Aブック)を作りそこに連動して一括で日付変更できるまでは行きました。 (スライムを倒した程度のレベルです) 次に 同じようにボタン(A)もブック毎に押してデータを落としていたのですが Aブックにボタンを設置し、そのボタンを押せば1〜5のブックのボタンが一発で押されるようにしたいです。 いろいろ調べては見ましたが知恵足らずで手詰まり状態です。 よろしくお願いします
446 : >>445 落とすって意味が理解できないけど 他のブックのマクロを実行したいってこと?ならそれでググれば答えが見つかる
447 : >>446 ありがとうございます。 試しにやってみたところ「オブジェクトが必要です」みたいなエラーが出ました Book1のAを実行すればBook2のBが実行されるが狙いで 書いた内容は Book1に Sub A() Application.Run "Book2!B" End Sub です
448 : 追伸追記です 現在Book1でA実行すればBook2のBがBook1で実行される状態です 狙いとしてはBook2のBをBook1のAで実行です VBA謎すぎて熱が出そうです・・・
449 : 連レス失礼します 何とか出来ました。
450 : >>435 この問題て良く使われるん? なんかあちこちで見た覚えが
451 : >>450 フカシギの数え方という元ネタから動画サイトなどでかなり有名になった。 ほのぼのと思いきや、シリアスな内容が入ってたりとか。
452 : >>450 PC-8001mkIIのデモプログラムにも入っていたのを思い出した。 数当てゲームのような、伝統的な練習問題になってるんだろうな。
453 : VBAでこれのプログラム作って頂戴 ttp://www.youtube.com/watch?v=0hlixJsRLso
454 : 予算は?
455 : ゲームそのものを作るより 解答するプログラムが良いな
456 : >>453 YouTubeは変わったのか? 実にみにくい。 画面が小さすぎるままか、最大化にするか、どちらかしかないから 小さいのは見にくいし、最大化にすると他のWindow見たり他の作業ができない。 実に困る。
457 : >>453 すでにある 「マスターマインド」でぐぐれ
458 : >>457 ふむふむ、なるほどね、こんな作りになってるわけか、あ、Rでぐぐってた
459 : >>457 残念。 ルールが違う。
460 : PerlからEXCEL-VBAのマクロを起動するには http://chaichan.lolipop.jp/perlnote/perlnote2007-11-182.htm
461 : Excel VBAの課題でタイマーを作成したのですが上手に動きません どなたかヒントをお願いできないでしょうか?お願いいたします Sub タイマー() endtime = Timer + Range("C1") * 60 + Range("E1") Do pt = Timer Range("C1") = (endtime - pt) \ 60 Range("E1") = (endtime - pt) Mod 60 Loop Until endtimes - pt <= 0 MsgBox "時間切れです" End Sub
462 : >>461 | Loop Until endtimes - pt <= 0 Loop Until endtime - pt <= 0
463 : >>461 ちなみに、そのやり方はビジーループと言って、どのプログラミング言語でもやってはいけない方法。 VBAでタイマーを使いたいなら、Application.OnTimeを使うべし。
464 : >>461 ヒント1 「シリアル値」 ヒント2 「Option Explicit」 ヒント3 「DoEvents」 Option Explicit Sub タイマー() Dim endtime, pt endtime = Time * 86400 + Range("C1") * 60 + Range("E1") Do pt = Time * 86400 Range("C1") = (endtime - pt) \ 60 Range("E1") = (endtime - pt) Mod 60 DoEvents Loop Until endtime - pt <= 0 MsgBox "時間切れです" End Sub
465 : >>463 よく見ろ 途中経過をセルに出したいんだよ あとOnTimeだと秒以下が切り捨てられる
466 : >>462-465 おかげで解決しましたありがとうございます お手を煩わせてしまいまして申し訳ありません
467 : ど素人質問ですみません As string*16とかの *16ってどういう意味ですか? ググッてみたけど全文英語とかでわかりません;;
468 : ↑ですが連レス失礼します *16=16文字までってことでおkですか?
469 : >>467 質問内容中の「As string」でググったら答えがヒットするんだけど 一体どんなワードでググってるの?
470 : >>468 ○ 16文字 × 16文字まで 16文字以外の文字列は入れることができない 短い文字列には自動的にスペースが足されて16文字になる 長いと勝手に切り捨てられる
471 : >>467 16文字の固定長文字列 16文字までじゃなくて、常に16文字の文字列
472 : >>470 >>471 わかり易い説明感謝します! >>469 As string*でググってました・・・ ほんとど素人で恥ずかしいです i=とかも良くわからなくて@@ さらに質問なんですが "12/"&Format(Cells(3,"A").Value,"00")&"/"&Format(Cells(3,"B").Value,"00" これがあったとして 日付だけB3に入れたい時ってFormat(Cells(3,"B").Value,"00"ここだけ残せばいいんでしょうか?
473 : まず自分で試してみてから聞きましょう w
474 : >>465 > 途中経過をセルに出したいんだよ OnTimeでも出せるよ。 > あとOnTimeだと秒以下が切り捨てられる そんな厳密なタイマー使いたいなら、別の方法をとった方がいいね。 ビジーループは糞。
475 : AdvancedFilterを使うと、文字列で後ろにあたかも*(オールマイティ)がついた状態でFilterがかかってしまうんですが これを防ぐ良い方法はありませんかな?
476 : 「排他制御」についてご紹介します。
477 : >>476 したまえ。
478 : この言語の実装にはフォントを設定する必要があり、可読性の低さもあって普及には至らなかった。
479 : >>475 そんな動きしないけど、具体的にどんなデータとどんなコードで発生するの?
480 : >>479 [データ] 項目1 R しっち R R Rカレー [抽出条件] 項目1 R [結果] R Rカレー
481 : variant変数にデータを格納するときに特定の文字を除いて格納したい場合。 A1:A100までを配列に格納、ただしその中で「AAA」という文字は格納しない ってやりたいですが。
482 : >461 配列にまとめて格納した後、 配列を全検索して「AAA」以外を別の配列に 入れなおせばいい。 もしくはfilter関数を使えば 指定された文字列を除いた配列が得られる。
483 : select caseの条件分岐でORは , でできるが ANDはどうやるんですか? ググってもORしか出てこない(´・ω・`)
484 : >>480 [抽出条件] 項目1 ="=R"
485 : >>483 AND でやってみた?
486 : >>483 例えばどんなことがしたいの?
487 : >>483 桃白白ならこう書くけど? Dim num1 As Long Dim num2 As Long num1 = 1 num2 = 2 Select Case num1 Case 1 Select Case num2 Case 2 MsgBox "たおぱいぱい" End Select End Select
488 : >>487 お仕事でVBA使用している方ですか?
489 : >>488 いいえ、無職でVBAを使用してない桃白白です
490 : >>489 使用してないのにそこまで書けるのですか? すごいです・・・
491 : >>490 はい、桃白白はすごいです、こんごともよろしくお願いします
492 : >483 select case で判定する変数は1つだからandは必要ないと思うよ。 比較するものが2つ以上ないとandは意味ないよね?
493 : >>492 Select Case True って使い方知ってるか?
494 : Select Case True Case (VarType(var) = vbString And var = "123") MsgBox "String-123" End Select ElseIfまんどくせな人には良いのかもしれんね。
495 : >>485 どういうふうにANDを付けるの想像できませんでした >>486 A1セルに「あ、い」のいずれかが最初にあり さらに「う」が最後に入ってる時に処理をしたいみたいな感じです Option Explicit Sub a() Select Case Left(Range("A1"), 1) Case "あ", "い": If Right(Range("A1"), 1) = "う" Then Range("A2") = 1 End Select End Sub こういうふうになるのはわかるのですが こんな条件ならまとめて一つの条件にできないかなと思いまして質問させていただきました
496 : 先生方、Web連携や外部ファイルや外部アプリ連携が勉強できる本でお勧めなのありませんか?
497 : >>496 本じゃないけどMSDNライブラリ嫁
498 : >>495 Select Case (Left(Range("A1"), 1) & Right(Range("A1"), 1)) Case "あう", "いう" Range("A2") = 1 End Select
499 : >>498 ANDを&で出来るなんて知りませんでしたありがとうございます &って文字列くっつけるだけかと思っていました
500 : >>499 &は連結演算子ですよ…
501 : >>499 それ、文字列くっつけてる。。。
502 : >>493 知らなかった。勉強になったよ。 他人のソース見ることが多いんだけど、その書き方はif文に直したい。
503 : 変数の名前について質問です。 For n1 = 1 To 4 For n2 = 1 To 4 For n3 = 1 To 4 ・ ・ といった形で変数nxそれぞれでフォーループをまわし、 AAA = n1 & n2 & n3 & n4 & n5 ・・・ にて 11111・・・11 11111・・・12 11111・・・13 11111・・・14 11111・・・21 といったx文字の数字を総当りで取るイメージな物を必要としているのですが、 例えばその桁が100であったり50であったり、任意の値によって For n1 = 1 To 4 For n2 = 1 To 4 For n3 = 1 To 4 ・ ・ For n100 = 1 To 4 もしくは For n50 = 1 To 4 のように、For loopで使うnxの変数も指定したいのですが どうすればいいでしょうか? For 桁 = 1 to 100 For n & 桁 = 1 to 4 next 桁 見たいな事ができればいいのですが。
504 : ちなみに少し上に出てたフカシギの数え方を勉強のため作ろうと思ったのですが、 自分の知識が足りず、升目の数によって大量のFor loopを書き、 升目分だけsubを作成していく事しかでき無かったためです。 質問している側がエスパーを要するような内容と感じてしまう内容で申し訳ないです。
505 : >>503 よくわからんけど配列使えば解決する?
506 : >>505 解決するかどうかは、わたしが聞いておるのだ
507 : 初歩的な質問ですが、お答えください。 指定した一つのセルの数値を返す場合はINDEXを使えば良いんですか?
508 : >>507 indexはセルを指定するために必要なものであって 数値を返すためのものじゃない
509 : >>508 なるほど・・・ わかりやすくいうと i = ("d4")といった形でiに数値を代入したいのです。 教えていただけないでしょうか?
510 : >>509 i = 0 with thisworkbook.worksheets("sheet1") if isnumeric(.range("d1")) then i = .range("d1") end if end with
511 : >>510 ありがとうございます。 ということは、そのままそっくり代入できる関数は無いということみたいですね。 精進します。
512 : ごめんなさい、自己解決しました。 i = Range("d4").Value で良かったみたいです。 難しく考えすぎてました。
513 : マクロを実行するとあるシートのA列に書いている内容を上から下まですべて iCloudのメモ帳と同期化させたいのですが こんなのって可能でしょうか? もちろんネット接続している状態です
514 : 天プレ読んで出直して来い
515 : 可能
516 : フォームに貼り付けるボタンのサイズとか高さとかはそのプロパティのところで 変更することができるけど、シートに貼り付けるボタンのサイズを変更しようと する場合はどうするんですかね (http://uni.2ch.net/test/read.cgi/operatex/1345250215/878 代行)
517 : >>516 >>1 >★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
518 : >>517 ボタンを右クリックからコントロールの書式設定で サイズを変更はできましたが、マクロの記録でやっても それは出てきませんでしたが 今回はコントロールの書式設定で変更できたんでこれでよしと しておきます (http://uni.2ch.net/test/read.cgi/operatex/1345250215/881 代行)
519 : 現在選択しているセルの取得する場合、 どうすればいいのでしょうか? たとえばA4:J3の場合はrange("A4:J3").valueみたいな感じで
520 : >>519 Selection.Value
521 : やりたいこと A1からA10まで連続でネットのURLリンクがある場合 それをまとめてリンク先のホームページを開く ですが マクロ記録でそれをやってもセルがselectされるだけでリンク押下まではしてくれません。 教えて下しあ
522 : >>521 http://officetanaka.net/excel/vba/tips/tips42.htm ここらに数パターン乗ってたよ
523 : VBAのIF文の条件で、日付の比較をさせたいのですが、 If Worksheets("Sheet1").Cells(row, 1) < DATE(2010,07,01) Then〜 という記述では認識されません。 どのように記述すれば良いか、アドバイスをお願いいたします。
524 : >>523 If Cells(r, 1) < DateValue("2010/07/01") Then RowとDateは予約されているので変数名などに使わない方がいい
525 : みなさんこんにちは、桃白白です。 選択範囲をhtmlのtableタグに変換したいのですが結合セルの 処理の仕方がわかりません。 http://uploda.cc/img/img5081f58e1bb33.png 画像のように選択したセルから <table> <tr><td colspan="2">1</td><td rowspan="2">2</td></tr> <tr><td>3</td><td>4</td></tr> </table> このような文字列を作りたいです。どうやったらいいですか、教えてください。 桃白白困ってます、教えてくださいお願いします。
526 : vba cells 結合 検出 でググれば
527 : >>526 なんか冷たくない?結婚生活送ってて最近ご無沙汰じゃない?って嫁に聞いたら 風俗行ってくれば?と言われたような、どうしてもっていうんならあたしが マットプレイしてあげてもいいけど?と言ってくれるかわいい嫁が欲しいです。 桃白白はそういう結婚生活を送りたいです。桃白白はいまそういう心境です。 vba cells 結合 検出でググったらMergeCellsとMergeAreaを使っちゃいな的な ページがありましたのでMergeCellsとMergeAreaを使ってみちゃいたいと思います。ありがとうございます。
528 : >>527 Excelどーなったの? 2000だったらあまってるのあげてもいーけどw
529 : >>527 なんだかんだいってお礼はしてくれるのね・・(笑) そういうのを仕事でつくった(htmlじゃなくってCのTableに変換)事あるんだけど、 4年位前だったんで忘れてたのでググる為の検索Keyを言っただけ。 ちなみに最近はVC++であるデータをhtlmのTableに落とすのを作っています。
530 : >>528 Office カスタマー プレビューを入手する | Microsoft Office カスタマー プレビュー http://www.microsoft.com/ja-jp/office/preview/try-office-preview.aspx Office 2013のプレビュー版があったからそれインストールした。桃白白はエクセルを使えるし、 マイクロソフトは桃白白からフィードバックを受けることができるし、このスレのみんなは 桃白白がいてくれてうれしいし、大勝利の関係。
531 : できた、やった https://friendpaste.com/1v4wWzAy2RQsNSL8MuXjtW
532 : 使ってる変数にどんな名前つけますか? カウンタのcとか、boolでfとか、IE だからobjieとかはなんとなく使うけど、モジュール内がややこしくなってくると、 わけわからんどうしよう..って感じになってくる\(^o^)/ とくにグローバル変数も使う時とかどうしよ... センスある命名おしえて下さい。
533 : 名前長をケチらない。意味不になる位なら日本語名を付けてしまえ。 自分はこんな感じでやってる。
534 : 迷うときは日本語で良いんだよ
535 : おっとかぶた。
536 : 確かにその方がいいかもしれない、コメントとかはバリバリ日本語で書くくせに、コードの記述は、日本語入れると動作に悪影響かも...とか考えて頑なにアルファベット使ってるとか俺あほや。\(^o^)/ でも変数名とか上手く使いこなすと上級者っぽいじゃんw なるほどInt の C か...(キリッ!) みたいな。
537 : 4文字熟語とかを変数に使うと上級者っぽいぞ。 上級のベクトルが一致してるかは知らんが。 驚天動地 = 国士無双 + 神出鬼没 中二っぽくてよい。
538 : 自分だけが読める感ですかね、よくないと思いつつ、その気持ちわかります/// 私用のexcelベースのアプリ作ってるんだけど、アプリ名なんか中二すぎて人に言えない///
539 : エクセルのバージョン変わったときだったかな、 変数名がセルのアドレスとイコールでエラー出たことあったけど、 どこにも情報出てなくて、またメッセージも皆目掴めずで困ったときあったなぁ。 確かアルファべット3文字+数字みたいな変数名を旧バージョンで使ってて、 バージョンアップ後、エクセルの仕様で列数変わって セル範囲内になっちゃってエラーになった。とかだったかな。
540 : そんな事があるんですね、覚えとこう。 常用してる変数名だと置き換え作業だけで発狂しそう../(^o^)\ 変数名って手ぐせと同じで、使いぐせついちゃいません?
541 : ここはお前の日記帳か?
542 : 続きはチラ裏でやりますw レス下さった方、参考になりました。 ありがとうございます。
543 : >>532 日本人は英語に弱い人が多いから 特に他人に公開するソースで意味のわからない英語、 タイプしづらい英語を使うとよろしくない。 この前どっかで見たソースで、added_dataみたいな変数名を見かけたが dが大杉でタイプミスしまくりでお話にならなかった。 ad_dataくらいでいいだろうよ。
544 : キーボードに弱いんですねw そんなんコード補完つかうでしょ
545 : >543の言いたい事はわかるが、>543の内容だけを見ると >543の頭が弱くてお話にならない感じだな。
546 : 541=544=545
547 : 一応MSにガイドラインというかこうするとイインジャネ?みたいなの有るよ 型3文字+内容を端的に表した単語、みたいな。 文字列ならstrTitleとか数値ならintCountてな感じで MSのサンプルコードは大概そんな感じになってる
548 : ハンガリアン記法ってやつでしょ
549 : 質問です。 下記コードを実行すると応答停止してしまい強制終了させています。 10000を5000に変更すると数分で終わります。 画像は3KB程度です。画像を取り込む数に限界とかあるのでしょうか? Sub gif10000() Dim gif10000 As Worksheet i = 1 Do While i <= 10000 With ActiveSheet.Pictures.Insert(Filename:="C:\TESTgif\bear.gif") .Name = i .Top = Rows(i).Top .Left = Columns(1).Left End With i = i + 1 If i Mod 10 = 0 Then Debug.Print i & "行目" Loop Rows("1:" & i).RowHeight = 60 End Sub
550 : >>549 限界については明文化されてないと思うけど、 ワークシートに大量のオブジェクト(画像など)を貼るとフリーズするのはまれによくある 64bit版だと多少はマシになる
551 : 明日DoEventsで確認しみます。
552 : >>549 仕様や制限についてはMSのサポートに聞かないとわかんないよ
553 : 指定のセルに日本語(アルファベット以外)があるかどうかを取得したい場合 そういったのって可能でしょうか?
554 : すみませんもう一つ質問ですが s = range("A1:B10").select でその範囲の内容を配列に入れれますが ただしA1:B10の中でA列が赤文字以外の場合のみってしたい場合 つまり一回全選択して、この行とこの行は除くみたいな感じです それとも一行ずつ見て行区方法しかないのでしょうか? というのも対象範囲が1万行ぐらいの場合ではじく行が3行程度の場合 スピードを考えると上記のほうがいいのかなと
555 : >>553 可能
556 : >>553 正規表現使え
557 : せ・・・・性器表現?
558 : >>553 はわかりました 554は可能でしょうか?
559 : そんなおもしろ関数を作ればいいんじゃないでしょうか?
560 : >>554 スピードを考えるなら実行すればいいじゃん。 あおりとかじゃなくて、普通にその質問レス書く間で 両方実行してどっちが早いか見るだけでは? ちなみに前者も、除く行を一個一個探す必要があると思うが・・
561 : >>558 スピードが重要ならスピードを重視すればいいと思うけど? 可能でしょうか?って質問がなんなのかよくわからん
562 : 質問者って巧い奴とそうでない奴が居るよな (回答を得やすい質問の仕方という意味で)
563 : 相手に伝わるように質問できるような人ならハナから自分でググって解決できるよ ここそうじゃない人のためのスレなんだから エスパー能力を試したりラリーを楽しんだりすればいいんだよ
564 : ま、どっちが良いかなとかこれで出来ますか的なやつは 実行環境にも左右されるし、実際にやってみた方が早いし確実
565 : こんにちは、桃白白です。 http://uploda.cc/img/img5088bd2d83be1.png 画像のように選択した範囲から次のような文字列を作りたいです。 A1 ├A2 B1 └B2 ├B3 │├B4 │└B5 B6 どうやればいいですか?難しくて頭が爆発しそうです。教えてください。
566 : >>565 パターンを洗い出してそれに当てはめれば?
567 : >>566 え、わかんなーい、桃白白わかんなーい、もっと詳しく教えて、どうやるの? 桃白白の頭が爆発しそうなんです。
568 : >>565 B5はB3にぶら下がってるけどB6はB1にぶら下がらないんだよね? 文字列を作るルールを第三者に伝わるように説明できないと回答貰うのは難しいと思うよ まあじゃれてるだけなんだろうけど
569 : >>568 とにかくさ、階層構造にしたいんだよね、じゃあ逆に聞くけどどうしたらいい? どういう文字列にしたらいいと思う?
570 : >>569 この階層構造は既存のフォルダ構成をエクセルで作ろうとしてるのかな? 既存のフォルダ構成を階層構造にしたいのであれば、DOSコマンドのtreeコマンドを使う方法があるけど。 因みに俺は>>568 じゃない。
571 : >>565 考えてみたけど、ルールが絞り込めない…? 列ごとに上から1セルずつ調べてって、文字列が書いてあるセルが 上と下にあったらその間を全部「│」にする、 文字列が書いてあるセルが上にあって右隣にあったら「└」にする、 「└」があるセルの上、及び右隣に文字列が書いてあったら「├」にする、とか こんな感じでいけるとおもうんだけど。あるいはこういう風な記述の組み合わせで。 必ず「└」を一発ズバリで判定して書かなきゃいけないわけでもない。 最初「└」を入れた(洗い出した)セルを後で(さらに洗い出して)「├」に書き換えてもいい。 それとAとBで処理を別枠にして回して(A1:D2とA3:D8)、あとから A1、B1の入っている左列だけは別処理で書き換える必要がでてくる?と思った。 実際に組んでないから苦情は受け付けられない!
572 : A1 ├A2 B1 ├B2 │└B3 │ ├B4 │ └B5 └B6 だったらそんなに難しくなさそうだけどなあ
573 : A1 ├A2 B1 └B2 ├B3 │├B4 │B5 B6 が正解では?
574 : ルール通りなら こうだね A1 ├A2 B1 └B2 ├B3 │└B4 │ │ │ B5 B6
575 : >>574 質問者はルールなんて提示してないけど?
576 : 文字だけ追ってスクリーンショット見てない人は見た方がいいんじゃない?
577 : Excelの質問でもないし、VBAの質問でもないんだから、いい加減スルーしろアホ共
578 : ぶっちゃけフォルダツリーだってのならこうだよなと思った root ├A1 │└A2 └B1 ├B2 │└B3 │ ├B4 │ └B5 └B6
579 : tree c:\ /f これ気持ちいいよな。 スクリーンセーバー代わりになるくらい。
580 : 初歩的な質問になってしまいますがよろしくお願いします。 どこが間違っているのかも分からないのですが、ここかなと言う部分を観てください。 Dim Posgyou, Posretu (行、列の変数) Dim hantei (判定用の変数) Posgyou = 3: Posretu = 4 hantei = Cells(Posgyou, Posretu) 判定にセル内容を代入 Do If Cells(Posgyou, Posretu) = hantei Then 省略 Else hantei = Cells(Posgyou, Posretu) End If Posgyou = Posgyou + 1 loop (条件は省略) 先ず、hantei = Cells(Posgyou, Posretu)で最初のセル値を代入して、 以下の、DO LOOP中のIF文の実行後に、1行毎処理していきます。 1行毎のセル値がhanteiと一致しなければ、 hantei に新規のセル値を代入するマクロです。 ここで、間違いはありますか? デバッグはスル―なのですが、想定通りの実行結果が得られません。 それとも、他の部分の間違いでしょうか?
581 : 罫線をもう1個挟むと見映えが良くなるw ┬root ├┬A1 │└─A2 └┬B1 ├┬B2 │└┬B3 │ ├─B4 │ └─B5 └─B6
582 : >>580 hanteiがRに見えて、そんな不純な実装してまともに動くわけがないだろと 風紀委員である桃白白が罵ってしんぜようかと思案していたら違っていた、お母さん・・・ なにをどう想定しているのかわからんから間違っているかはわからんけど、重複除去かなんかか? D 3 A '処理される 4 A '処理される 5 A '処理される 6 B '処理されない 7 B '処理される 8 C '処理されない こうなるだろ、hanteiの初期値が違うんじゃね?
583 : Excel2003(11.6560.6568)SP2で、VBAの途中でデバッグかかってとまるようになった ブレークポイントはもちろん設定してない ただ、前に一度ctrl breakでとめたら、その場所記憶したみたいで、なにしてもそこで止まるようになった。エラーじゃない。 他のPC(EXCEL2003だけどSP2じゃない)からだと止まんないでふつうに走る こういう不具合出たことあるひといる?バグなのかな?
584 : 分かりにくくて済みません hantei = Cells(Posgyou, Posretu) シート上のJ3(仮にAとする) 仮に セル値が J3(A) J4(A) J5(B) ここでIF文のElese が実行されhantei にセル値(B)が入るようにしたいのです J6(A) ここでIF文のElese が実行されhantei にセル値(A) DO LOOP中 cellsのPosgyouを1加算していき、J列の値を判定フラグにしたかったのです。
585 : >>584 ステップ実行で各変数の値をウォッチしてみたら? 期待通りに動かない可能性なんて山ほどあるのでエスパーしきれない
586 : >>584 じゃあ>>580 は間違ってないんじゃね、列は違うだろうけど。 想定通りじゃなかったというのはどういうこと?どうなったの?
587 : >>580 まず、やりたいことを日本語で書け。 で、何が期待したどうさと違うのかを日本語で書け。 あと「判定フラグ」とかいう、プログラミング用語っぽい単語は使うな。
588 : 色々有難うございます ステップ実行で値をウォッチを言う機能があるのですね。 もうちょっと、自分でも粘って考えてみます。 実はhanteiをフラグにして処理をIFで変化させるVBAにするつもりだったのです。
589 : >>588 > 実はhanteiをフラグにして処理をIFで変化させるVBAにするつもりだったのです。 あのねぇ、これは「手段」と言うの。 目的を書け。
590 : >>580 間違いはありません。あなたのプログラムした通り動きます それがあなたの希望通りかは、あなたの希望が解らないので判断できません とりあえず、 Doループ入ってすぐCells(Posgyou, Posretu) の比較してるけど、行も列もそのままだから、必ずThen側実行するぞ? なんの修飾もなしにCellsつかってるけど、どのシートのセルみてるか解らんぞ それ以外は概ね>584の動作してるぞ
591 : >>583 ノシ リアルタイムで出るよ。 7@64bit のマシンで excel2000 2003 ともに出る。 会社PCで作ってなんら問題なく実行できていたものも、 この環境じゃとまったりする。 例えば msgbox "a" range("a1").select これでも時折セレクトでエラーハッスル。 もちろんなんら材料があるわけないので、 エラー(デバッグ応答)時にそのまま続けて実行すると、普通に抜ける。 何回同じマクロを同じ環境でやっても、 出たり出なかったりするんだけど、出るときはかなりの頻度だよね。 まぁ自分も調べに掛かったけど、ヒットしなかったから放置している。 ブレークを解除しろとかよく見つかるけど、してねぇよ。ってな。
592 : ブレークポイントじゃなくてウォッチ式でも入ってるんじゃね
593 : Debug.Assert(0)
594 : win7 32bit 2003です。E1に入った数字によってリストの情報が反映され、 指定範囲の番号に該当する書類を作るような仕組みを作りたく。 しかし無限印刷になってしまいます・・・お助けくださいませ。 Sub 印刷() a = InputBox("開始番号を入力") z = InputBox("終了番号を入力") Do Range("E1") = a a = a + 1 ActiveWindow.SelectedSheets.PrintOut Copies:=1 Loop Until a = z End Sub
595 : >>594 無限印刷ってなに? 一般的な用語使わないと伝わらないよ とりあえずロジックの問題か印刷の問題かぐらい切り分けしたら?
596 : >>595 開始番号1、終了番号10と入力しても10で終わらずずっと印刷され続けます。 loop関数が無限ループになってしまってるのではと思うのですが解決法が解らず。
597 : http://www.uproda.net/down/uproda512919.zip.html ※「Hnn(年度)」…平成(nn-1)年4月〜平成nn年3月 ※「中之島」「渡辺橋」「大江橋」「なにわ橋」…「H21」10月の[総数]は日割り(13/31日) 。 ※「大阪難波」「桜川」「ドーム前」「九条」…「H21」3月の[総数]は日割り(12/31日) 。 ※「総数」…「H18」の7月以降及び年度平均はOTS線を除いた数値となっている。 平成23年4月〜平成24年8月 http://www.city.osaka.lg.jp/keikakuchosei/page/0000020916.html [2012年10月25日] http://www.city.osaka.lg.jp/keikakuchosei/cmsfiles/contents/0000020/20916/6-2.xls 平成23年3月〜平成13年4月 http://www.city.osaka.lg.jp/keikakuchosei/page/0000164566.html [2012年4月18日] http://www.city.osaka.lg.jp/keikakuchosei/cmsfiles/contents/0000164/164566/12-8.xls
598 : >>594 とりあえず Sub 印刷() の次に Dim a As Integer, z As Integer の1行入れろ InputBoxにIntegerにならない文字列入れたときは知らん
599 : >>596 ロジックの問題か印刷の問題かぐらい切り分けしたら? って言ってるのになんでやらないの?
600 : 数値の終了条件に=を使うやつは素人。
601 : >>599 お前こそ素人に分かる一般的な用語で説明してやれよw
602 : あの終了条件が数値だと思ってるならもっと素人
603 : >>598 出来ました、有難う御座いました。 小さい会社でマクロのマの字も知らず無茶振りされ、 ネットで探した式もまともに動かず途方にくれておりました。 >>599 すみません、ロジックか印刷かという文面が良く解りませんでした。 印刷の問題はプリンタの会社に電話するものではないのでしょうか。
604 : >>603 もしも今回のような無茶振り?がまだ続くようなら 一回本買って、VBAの勉強した方がいいよ 基礎の基礎の部分からわけわからんままやってるだろ VBAどころかプログラムの根本が分かってない感じ
605 : プログラムの根本なら俺が教えてやるから聞きにこいよ
606 : たまに来る程度の無茶振りなら勉強するより聞いた方が効率は良いだろう。 専門外の事だ→勉強しなきゃ の思考回路は社畜に陥りやすい
607 : みなさんおはようございます、桃白白です。 >>570-579 , >>581 ありがとうございます。 root ├A1 │└A2 └B1 ├B2 │└B3 │ ├B4 │ └B5 └B6 ご提案いただいたこの形式にしたいと思います。桃白白はこれに決めました。 この文字列を作りたいという強い思いが桃白白の胸にありますが、問題はプログラムだと思います。 それが問題だと桃白白は認識しています。みなさんならどのように実装しますか?教えてください、お願いします。
608 : >>607 これは業者にお金払って開発してもらうレベルの案件。 通りすがりの俺らでは無理。
609 : Rootがセル(1,1)にあるとして、 (2,1)から(B列の最終行-1,1)までの範囲で下に向かってセル一個ずつ選択するループ もし同じ行のB列に文字があったら"├"、なければ"│"を書き込む。 最後に(B列の最終行,1)に"└"を書き込む。 次にB列の最初の文字列(x,2)について、その次の文字列(y,2)を求めて (x+1,3)から(y-1,3)の範囲でA列のときと同じ作業をする。 終わったら(y,2)についても同様の処理。 ってのを順番に繰り返せば良いんでない? 同じ処理の繰り返しになるから再帰処理で書けばコードはだいぶ短くなると思う。
610 : MkDir("A1") MkDir("A1\A2") MkDir("B1") MkDir("B1\B2") MkDir("B1\B2\B3") MkDir("B1\B2\B3\B4") MkDir("B1\B2\B3\B5") MkDir("B1\B6") Set WSH = CreateObject("WScript.Shell") Set wExec = WSH.Exec("%ComSpec% /c tree A1 > tmp.txt")
611 : >>608 桃白白にお金があれば業者の可愛い女性の担当者にお家に来てもらって、 ところで桃白白さんイケメンですよね、もてるんじゃないですか?いやそんなことないですよ・・・むぎゅ、 みたいな展開も期待したいところだけど、残念ながら桃白白お金ないから無理
612 : 皆さんならどのようにとかじゃねぇ もう作れるだろ作ればいい 多少ソースが汚かろうが思い通りに動けばいいだろ
613 : >>612 え、できなーい、桃白白できなーい、できるだけきれいなソースがいいな、教えて?
614 : ツリー構造でフォルダを出力するのかね それなら以前作ったことあるよ ポイントは、深渡を表すグローバル変数を用意する、当然回帰関数
615 : >>614 は間違った グローバル変数じゃない 深渡は呼ぶ側で引渡し、呼ばれた方でインクリメントする
616 : >>611 金なくても自画撮写真くらいうpできるだろ
617 : いずれにしても、セルに配置した文字のツリー表示なんてのを ExcelのVBAでやることに何の意味があるのか不明だし 誰もコードを出さないところから見ても面倒なことは間違いないし この話題はここで終わりとしよう。
618 : >名前:桃白白 この時点でネタ確定なんだからスルーしておけばいい
619 : >>617 超初級の練習問題レベルだし 別に面倒じゃないけど やる気が起こらない なにかやる気スイッチ押してくれればやるお
620 : >>618 心外、桃白白マジ心外。 >>619 (  ̄∇ ̄)σ=σ[]ピンポン!!ピンポン!!ピンポン!!ピンポン!! >>609 読んだから、桃白白ちゃんと読んだから。 いま桃白白のタマムシ色の脳細胞で考えているところだから。
621 : >610 で答え出てたんだな
622 : excel2003(xp),2010(7)両方で試しましたが駄目でした。 シート2の1,2列をシート1の1.2列にコピーするコードです。 Worksheets("Sheet1").Range(Columns(1), Columns(2)).Value = Worksheets("Sheet2").Range(Columns(1), Columns(2)).Value これの後半のRange(Columns(1), Columns(2))で引っかかるのです。 これがRange("A:B")なら大丈夫なのですが、何がいけないのでしょう。
623 : >>622 Columnsプロパティはオブジェクトが指定されないときアクティブシートの列を返すんじゃね。 オブジェクトが指定されてないからアクティブシートの列を返してSheet2がアクティブシートじゃないから 列が見当たりませんぜ的なことなんじゃね。
624 : VBAのクラスモジュールで質問があります。 JAVAで言う、ThisやSuperのようなものは無いのでしょうか
625 : 無いのです
626 : >>623 分からないんだったら回答すんなよ。 回答するんだったら裏くらい取れよ。 自分の問題さえも解決できないのに、他人の問題に口出しすんな。 話がややこしくなるだけ。 質問している人や質問の内容に対して回答している人に対して大変失礼。
627 : >>626 反証あるの?ないんだったらお前が黙ってろ。
628 : >>桃白白 反証云々は関係ないんだよ。 質問者に対してこうなんじゃね?っていうこと自体問題が理解できていないこと。 推測なんて意味無いからw 知ったかもいい加減にしとけ。 ようは何も分かってないんでしょwwwww
629 : >>628 桃白白は回答するのに客観的ソースは必ずしも提示する必要はないと思ってるわけ。 だから思いついたままに回答するわけ。でもお前は裏を取って回答するべきだと思ってるわけだろ。 桃白白が何もわかってないことの根拠がないじゃん。何もわかってないんでしょってお前は桃白白に 聞いちゃってんじゃん。桃白白はそれで問題ないという立場だけれどもお前は違うわけだから お前は自爆してるだけじゃん。ようはお前は桃白白に嫉妬してるだけだってこと。質問に答えるどころか 桃白白に絡んでるだけじゃん。
630 : >>625 ありがとござます。どこかでMYみたいなものを見たけど違うものだったか
631 : >>618
632 : >>桃白白 思いついたまま回答されることほど質問者に対して失礼。 この時点で質問に対してきちんと理解しないで回答してるってこと。 お前に対して凄い迷惑と思うことはあるけど、嫉妬なんてしたことないw だってきちんと回答できてないんだもんwwww お前の回答は百害あって一利なし。
633 : ご回答ありがとうございます。 確かにアクティブシートを変えると引っかかる所が変わる気がします。 しかしながら、オブジェクトの指定方法というのが分かりません、自分なりにこうではないかと、
634 : 633の続き Dim sheet1 As Worksheet, sheet2 As Worksheet Set sheet1 = Worksheets("Sheet1") Set sheet2 = Worksheets("Sheet2") sheet1.Range(Columns(1), Columns(2)).Value = sheet2.Range(Columns(1), Columns(2)).Value としましたが駄目でした。申し訳ありませんが、オブジェクトの指定方法をいうのを教えて頂けますでしょうか。
635 : >>632 ひどい、いっとくけど桃白白が傷つかないと思ったら大間違いだからな すごい迷惑というのを直ちに撤回してもらいたいよ、ああひどい
636 : >>634 Columnsプロパティを呼ぶときにオブジェクトを指定してみちゃいなよ sheet1.Range(sheet1.Columns(1), sheet1.Columns(2)).Value = sheet2.Range(sheet2.Columns(1), sheet2.Columns(2)).Value
637 : >>636 Withステートメントくらい使えよボケ!
638 : >>636 おお、いけました。ありがとうございます。 2日程悩まされていました。
639 : http://www.atmarkit.co.jp/fdotnet/dotnettips/591mp3tags/mp3tags.html こんなmp3ファイル一覧の取得の際に、ファイル名以外に タイトル、サイズ、ジャンルなどを一緒に取得したいです VBやC#ではできるみたいなのですが VBAでは可能なんでしょうか? いろいろ設定が必要な気がしますが
640 : >>637 >>636 でWith使っても大して意味ない気がする Sheet1かSheet2のどっちかしか括れないでしょ。
641 : >>640 に便乗で質問ですが、 withステートメントでまとめようとしても片方しか出来ません。 変数で受け渡して一応出来たのですが、もう少しスマートな方法はあるでしょうか。
642 : Dim sheet1 As Worksheet, sheet2 As Worksheet Set sheet1 = Worksheets("Sheet1") Set sheet2 = Worksheets("Sheet2") Dim a As Variant With sheet2 a = .Range(.Columns(1), .Columns(2)).Value End With With sheet1 .Range(.Columns(1), .Columns(2)).Value = a End With
643 : >>641-642 質問の趣旨からは外れるけど、 このコードだとむしろ変数sheet1とsheet2のほうがあんまり意味ないね。 Dim a As Variant With Worksheets("Sheet2") a = .Range(.Columns(1), .Columns(2)).Value End With With Worksheets("Sheet1") .Range(.Columns(1), .Columns(2)).Value = a End With これだけでいける
644 : >>641 Dim sheet1 As Worksheet, sheet2 As Worksheet Set sheet1 = Worksheets("Sheet1") Set sheet2 = Worksheets("Sheet2") sheet1.Columns(1) = sheet2.Columns(1) sheet1.Columns(2) = sheet2.Columns(2) こーゆーのはどうだ? なんなら最後2行をFor Nextでまとめると 行数は増える(たぶん命令実行のコストもかさむ)けど メンテナンス性は増すかも知れん。 Dim sheet1 As Worksheet, sheet2 As Worksheet Dim I As Long Set sheet1 = Worksheets("Sheet1") Set sheet2 = Worksheets("Sheet2") For I = 1 to 2 sheet1.Columns(I) = sheet2.Columns(I) Next I
645 : >>643 と>>644 のあわせ技で Dim I As Long For I = 1 to 2 Worksheets("Sheet1").Columns(I) = Worksheets("Sheet1").Columns(I) Next I
646 : こぴぺして修正忘れた・・・orz Dim I As Long For I = 1 to 2 Worksheets("Sheet1").Columns(I) = Worksheets("Sheet2").Columns(I) Next I ですた Worksheets("Sheet1").Columns(1) = Worksheets("Sheet2").Columns(1) Worksheets("Sheet1").Columns(2) = Worksheets("Sheet2").Columns(2) このほうが短いか。スマートじゃないけど。
647 : このような式を作っても、sub Aの式からcallされる度にpが初期化されます。 Sub A()の前にpの型を宣言すればいいのですが、あんまりスマートになりません。 Sub B()内で宣言をして、値を保持する方法ないですか?(ただしプログラムの実行が終わればpは初期化) Sub A() dim i as long for i = 1 to 100 call B next i End Sub Sub B() dim p as long if p = 0 then elseif p = 1 then else end if p = p + 1 End Sub
648 : >>643->>646 ご回答ありがとうございます。いろいろな書き方がありますね。 微妙に不規則に左右に連続して同じような式を書くことがあります。
649 : >>648 の続き sheet1.Range("A1")=sheet2.("B3") sheet1.Range("C5")=sheet2.("D4") ・・・・ この場合はやはり>>643 がベストですかね。 そうなると普通に書いた方がいいかなと思ってしまいます。
650 : >>647 pをStaticにしろ
651 : >>639 可能
652 : >>649 それはむしろ>>644 のやり方ではなかろうか? でもって、セル一箇所ずつ指定するなら Range()よりCells()の形式のほうが便利だと思うよ。 Range("A1")はCells(1,1)だしRange("B3")ならCells(3,2)だから >>649 のコードは sheet1.Cells(1,1)=sheet2.Cells(3,2) sheet1.Cells(5,3)=sheet2.Cells(4,4) ってなる。 Cells(x,y)みたいに変数が使えるから Cellsで書いておくといろいろと捗る場合が多いよ。
653 : >>650 それだと再び実行したときにpが100から始まってしまいませんか? 今手元にプログラムがなくて、すぐに確認できないのですが、 たしか試してプログラムが終了しても値が保持された気がします。
654 : >>652 今までは with sheet1. Range("A1")=sheet2.("B3") Range("C5")=sheet2.("D4") end with としていましたが、右の部分もwithでまとめたいなというのが元なのですが、>>644 の方が良いでしょうか。
655 : >>647 なんでB内で宣言をするようなスマートじゃない方法を採ろうと思うの?
656 : すいません。 with sheet1. Range("A1")=sheet2.Range("B3") Range("C5")=sheet2.Range("D4") end with ですね。
657 : >>656 ケアレスミスだと思うけど >with sheet1. >Range("A1")=sheet2.Range("B3") >Range("C5")=sheet2.Range("D4") >end with じゃなくて with sheet1 .Range("A1")=sheet2.Range("B3") .Range("C5")=sheet2.Range("D4") end with ですね("."の位置が違ってる) この程度のものであればWith使うほどの事もなさそうに思います。 Withってネストできるけど それはあくまでもより下位のオブジェクトに対してであって、 たとえば Workbooks("hoge.xlsx").sheets("sheet1").Range("A1") の時に With Workbooks("hoge.xlsx") With .sheets("sheet1") .Range("A1") End With End With と書くことは可能ですけど、 >>656 みたいなときには sheet1 と sheet2 の両方を同時に With で指定できないですからあんまり意味ない気がします。 私が>>643 で書いたのはあの時点のコードではsheet1とsheet2という2つの変数が あんまり有効に活用されてないってことであって、 >>656 に関してならWorksheetの指定に変数を使うやり方のほうが中途半端にWithを使うより有効だと思います。
658 : >>657 ありがとうございます。 この例は聞きやすいように短くしたのですが、どちらにしても、右と左を端的にwithでまとめる方法はないという事ですね。 場合によって変数を使っていくようにします。
659 : >>658 Withでまとめられない場合、変数名を短くするのも有効な手だと思いますよ。 たとえば、 Dim sheet1 As Worksheet を Dim sh1 As Worksheet にすればコードが若干短くできますよね。 あんまり短い変数名だと可読性が下がるんでやりすぎは拙いですけど、 Workbook型ならWBで、Worksheet型ならSH、とか 自分なりの命名則を決めておくと効率が良いです。 (ちなみに私は変数名には大文字使ってます。そのほうがタイプミスが分かりやすいんで) まぁ、自分ひとりでやる作業じゃないなら職場全体とかプロジェクト全体とかで意思統一を計る必要が有りますけど そういう職場ならすでに何らかのルールが決められてるでしょうからそれに従うって事で。
660 : >ちなみに私は変数名には大文字使ってます さすがにその個人的ルールは特殊すぎるので公の場で紹介しない方がいいと思う 特に初心者が多いこのスレではなおさら
661 : >>647 あ、どうもこちら桃白白、Aの終わりに初期化するしかないんじゃね Sub A() Dim i As Long For i = 1 To 100 B Next C 0 End Sub Sub B() Dim p As Long p = C(0) p = p + 1 Debug.Print p C p End Sub Function C(n) As Long Static s As Long C = s s = n End Function
662 : >>634 そもそも広い範囲ならコピーするのが妥当だがそのスタイルならResize使えば変数は要らん Sheet1.Cells.Resize(,2).Value = Sheet2.Cells.Resize(,2).Value 広い範囲の配列を代入するのは馬鹿げているが
663 : Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) Dim myPic Dim myRange As Range '画像を配置するセル範囲 Dim rX As Double, rY As Double myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif") If VarType(myPic) = vbBoolean Then Exit Sub Set myRange = Target 'このセル範囲に収まるように画像を縮小する Application.ScreenUpdating = False With ActiveSheet.Pictures.Insert(myPic).ShapeRange rX = myRange.Width / .Width rY = myRange.Height / .Height If rX > rY Then .Height = .Height * rY Else .Width = .Width * rX End If .Left = .Left + (myRange.Width - .Width) / 2 '写真を横方向の中央に配置 .Top = .Top + (myRange.Height - .Height) / 2 '写真を縦方向に中央に配置 End With Application.ScreenUpdating = True Cancel = True End Sub こんな感じの写真挿入のマクロがあるのですが、メールでファイル添付するときにマクロを外して送りたいのですが、送る方法ってありますか? 送る際相手方がマクロのないファイルを欲しいそうなので、困っております。もし、マクロを外した場合解除されてしまう時は、他にマクロを使わずに効率的ないい方法はないでしょうか?数百枚の写真を貼り付けるので、いい方法があればお願いします。
664 : >>663 エクスポートするなりして別のファイルとして送ればいい
665 : やはり、マクロを解除してしまうと、画像のサイズも解除されてしまう感じですかー・・
666 : 相手方はマクロで実装してある機能そのものが欲しいの? それとも写真が貼り付けられた完成品があればいいの? 前者は無理な注文、後者なら写真貼ってマクロ消して送ればいいだけだし、 一体、何を悩んでるのだろうか。
667 : >>663 関係ないけどそのUIで数百枚の写真を貼り付けるのはものすごく大変そうだな
668 : >>609 できた、できました。桃白白マジヤッホー。ありがとうございました。 https://friendpaste.com/j4GDQaQsbkxeX8r2MoqWe
669 : >>647 どうしても関数Bでpを宣言しな蹴ればいけないのかな? 提示されたコードを見る限り、関数Aの変数iを関数Bに引数として渡せば済むような気がするけど。 Sub B(ByVal p As Long) if p = 0 then elseif p = 1 then else end if End Sub
670 : >>683 マクロの中身の問題というよりは取り扱いの問題だと思う。 ・相手がマクロを無効にする設定にする ・写真を貼り付けて完成品にしたファイルからマクロを消して送る。 またはそれを目的にマクロに手を加える。 マクロを記述したSheet1と貼り付ける目的のSheet2を作って、完成後のSheet2だけを 新規Excelファイルとして保存するように作業手順を改めるとか。 ・あなたが今与えられている環境があなたの自由に出来るのなら、 Excelテンプレートとしてマクロを記述、必要なファイルを開いた時に そのマクロが作動するようにする、とかもできるはず。 写真を何枚か貼ってリサイズして作ったシートからマクロを除去しても、 既に貼られてリサイズされてる写真が勝手に大きさが変わるってことは考えにくい。 試してみた?
671 : 仕事でファイルを送信する際マクロの使ったものはだめという規則があるらしく、なんとか効率化できないかと思ったのですが、、、 とりあえず、マクロの入ったものはNGだそうで、困ってる形です。 完成品でマクロを貼り付けたシート内を削除したのですが、マクロがある形になってしまいました。
672 : >>671 効率化?何を効率化したいの? 困ってるとか困ってないとかそんな情報役に立たない ブックに記述されたVBAコードの削除方法が知りたいのかな わからないならzipとかで圧縮して送っちゃえばいいんじゃね?
673 : マクロの記述が出来るのに削除が出来ないとか、 いくらなんでも釣り針が大きすぎるだろ・・・
674 : >>671 「excelからマクロを削除」でググるとか?
675 : >>671 そういう場合は標準モジュールにマクロを書くのがおすすめ。 その標準モジュールをエクスポート(basファイル)した後に解放すれば、マクロのないブックになる。 再度同じマクロを使いたい場合は、エクスポートしたbasファイルをインポートして使う。 因みに標準モジュールが分からないということならググれ。
676 : おお!ありがとうございます。 マクロを完全に削除することができました。 まだ、本で学んで日が浅く、少しづつ触っているのですがとても助かりました。 今回は助けていただき、ありがとうございました。
677 : 質問です。 A1からA50にランダムに"☆"が入っています。ここから☆が入っていないセルを18コ、☆が入っているセルを2コ、計20コのセルを選ぶにはどうすればよいですか? ただし、選ぶセルはどれも行が連続せず、また、☆は少なくとも2コ以上あり、☆が多すぎて☆の入っていないセルが18コ選べない場合は☆を3コ以上選び、必ず計20コのセルを選択するものとします。
678 : それが何の役に立つの?
679 : >>677 課題かなんか? ☆が入ってないセルを調べて配列Aにいれとく ☆が入っているセルを調べて配列Bにいれとく 配列に入れる直前に特殊条件(行が連続しないとか)に該当するものを入れないようにする ☆の入っているセルを2個、配列Bから選んで抽出 引数Cを用意して最初に20をいれ、抽出するごとに1減算(この時点で18) ☆の入ってないセルを配列Aから選んで抽出 引数Cは抽出するごとに1減算を続ける、変数Cが0になれば終了 引数Cが0に満たなかった場合は、☆の入っているセルを配列Bから選んで抽出 引数Cが0になったら抽出は終了 必要ならrndでランダムな数字をだしてそれに従うようにする その場合既に選択済みのセルを再度選択しないよう、抽出する時に 配列上から順に全部チェック,も追加。 適当。抽出方法はお任せ。
680 : VBA関係ない、プログラム以前のアルゴリズムの問題 まず2個の☆を選ぶくみ合わせをしらべて、その状態で18個の空白を選択できるか調べないとダメじゃね 全部の星2個選ぶ組み合わせで順次チェックして、それがOKならそれを出力して終了 全部の星2個選ぶ組み合わせで空白18個が不可能ならどうするかは、選択の優先順位考えないとだめだな まあ、星三つでやって、だめなら星4つ....って順次増やすのが妥当か
681 : >>676 個人的にはマクロ用のブックを一つ作る。 使うときはマクロ用のブックを起動。 画像編集用のファイル名、挿入する画像のフォルダ又はファイル名を指定しマクロ実行かな。 basファイルを使うやり方は元のファイルを手で触る必要があるし、マクロの解放忘れとか問題が出そう。
682 : Pivotテーブル内に対する条件付き書式で 「値が表示されているすべてのセル」を指定したいのですが、 VBAで指定する(新たに作成する)方法はあるでしょうか?
683 : >>679 ☆が連続した行に入ってる場合とかどうすればいい? というか具体的に質問してるわけだし誰か完璧なコード書いてくれないか?
684 : 出力は隣の列に増やしてく感じでお願いします
685 : >>683 たおぱいぱーい・・・・・・はーい!! >>679 とか>>680 とか見ると超難しそう。 それが桃白白の感想です。以上です。
686 : >>683 完璧な仕様書いてないのに 完璧なコードを出せるわけないじゃない 諦めて自分で作れ ヒントは出てんだから
687 : そもそも>>1 ★5にもある通り、ここは丸投げの制作依頼所ではなく ヒントを貰って自分で書くって人がヒントを貰いに来る場だからな
688 : 何度も言うが>>1 のテンプレは誰かが勝手に作った物で、厳密に守る必要なんかない 元々、答えたいやつ、作りたいやつは勝手にすればいいってスレだから
689 : アルゴリズムこそブログラミングの醍醐味。 もっと語ろうぜや。
690 : 質問スレなんだから、助け合いの場として使えばいいとおもうけどな。 まー仕事とかですぐ使うような人のはすぐ答えてもいい気はする
691 : おれ的には後で除外するのが手っ取り早いと思うが、どうだろう?
692 : >>689 同意。 あなたはすばらしい。 ところでExcelVBAを使って野球シミュレーションを作りたいのですが アルゴリズムはどうすればいいですか? ボールの移動のようなアクション部分は一切排除して、 各選手の能力値(野手なら長打力とかミート力や総力や守備力などなど、投手なら球速や切れやスタミナなどなど)を設定しておき 結果は「ヒット」「三振」「ホームラン」「内野ゴロ」みたいにテキストで出るだけ、というところから始めよう。
693 : 677に答えられないからって話を逸らすヤツ…Orz
694 : とりあえず1リーグ6チームで、「得点力」「防御力」のたった2パラメータのみ存在し、 イニングの点数だけしか表示せず(★) それを1シーズン144試合やって優勝チームを決める、ところからスタートしてもいいかもしれない。 ★とは、単に下のように点数しか表示しない単純なもの。 巨人 0 0 2 1 0 0 3 0 0 6 阪神 0 0 0 0 0 0 0 0 0 0
695 : もちろん自分で叩き台は用意するんだろうな?
696 : みんなーExcelは表計算ソフトだからなー VBAも自ずとExcelの主な使途である事務処理の 支援・自動化のために使うべきものであって ☆を選ぶとか野球シミュレーションとか そんなのなんでExcelでやるんだよって突っ込みたくなる テーマはスレ違いだと思うぞー
697 : >>688 >>1 はスレ主である。 >>1 のテンプレが嫌なら自分でスレくらい立てろ。 テンプレ無視だったらどんな話題でもOKになるというのが分からないみたいだね。 何事にもルールがあってそれが嫌なら自分で作ればいいだけのこと。 スレ立てたとしても、お前みたいなやつがまた沸いてきて スレを荒らされるのは目に見えてるけどね。
698 : >>692 そういうのは糞ウゼェから別スレでやれ
699 : アルゴリズムは言語関係ないからな それ用のスレがどっかになかったか?
700 : >>683 ☆が連続した行に入ってるときは片方を読まないようにすればいいと思うけど、 ☆が入っているセルが2個、☆が入ってないセルを18個、計20個の組み合わせを1個見つければいいのか? それとも可能な組み合わせを全部列挙する必要があるのか?
701 : >>696 いや、シミュレーションは事務処理の自動化の醍醐味だろ?
702 : まあ良いんだけどさ嫌いじゃないし でもここExcelVBAスレだしな。 >>677 だって50*50の配列でってすれば 他言語のスレでも普通に質問できちゃうだろ そういうのはそういうスレで聞いた方が早いし確実だと思うぜ
703 : Dim FoundCell As Variant Worksheets("temp").Activate i = 2 Do i = i + 1 targetFile = Cells(i, 3) Set FoundCell = Worksheets("全FileList").Range(Cells(2, 2), Cells(lastrow, 2)).Find(What:=targetFile) If FoundCell Is Nothing Then If Right(targetFile, 4) = ".lzh" Then er_cnt = er_cnt + 1 Call S_Output2Text(targetFile, "Excel不一致データ", "append") End If End If Loop Until Cells(i, 1) = "" tempシートのC列にあるファイルリストと事前に集めておいた"全FileList" シートのB列とを比較してチェックしようとしているんですが、 (lastrowには18832という値が入っています(可変ですけど)) Set FoundCell = 〜のところで アプリケーション定義またはオブジェクト定義のエラーです となります。 解決策教えて下さい〜m(__)m
704 : >>703 >>622 と同じミス 解説は>>623 解決策は>>662
705 : 703です。シートを切り替えて作業したら出来ました。ありがと。
706 : まぁ解決したならどんな方法でも良いわけだけど、 Cellsオブジェクトの使い方を間違ったのがそもそもの原因なんだから その辺きちんと把握しておいたほうが今後のためだと思う。 たとえば、 dim R As Range Sheets(2).Activate Set R = Sheets(1).Range(Cells(1,1),Cells(2,2)) というコードは Set R = Sheets(1).Range(Sheets(2).Cells(1,1),Sheets(2).Cells(2,2)) だと解釈されるからエラーになる。 でも、Sheets(2)のセルA1に"A1"とセルB2に"B2"を入力 (別に"F2"と"Y3"とかでも何でも良いし、""も不要)しておいて こんな風に書くとエラーにならない。 Set R = Sheets(1).Range(Cells(1,1) & ":" & Cells(2,2)) Set R = Sheets(1).Range(Cells(1,1).Value,Cells(2,2).Value) (どちらも同じ動作をする) まぁ、Sheets(2)のセル内にA1形式でセルを指定しておかないと結局エラーになるけど。 とにかく、ただ単に"Cells"と書くとActiveシートに対して処理をしてしまうから 常にそれを意識していないとエラーになったり、あるいは意図しない動作になったりする。 で、>>662 はそういう暗黙のオブジェクト指定を気にせずにすむ書き方。 >>703 のケースだと、 Set FoundCell = Worksheets("全FileList").Cells(2, 2).Resize(lastrow -1).Find(What:=targetFile) と書くと問題なく動く。 この書き方を覚えておくと色々応用が利いて便利。
707 : >>706 703です。解説ありがとうございます。m(__)m
708 : セオリーの書き方をテンプレに入れればこんな同じような質問がなくなると思う。
709 : >>708 質問する初心者がわざわざテンプレなんて読むわけないだろ 常識で考えろ
710 : >>709 回答者が楽しちゃいかんのか? 「テンプレ嫁」で終わりなんだが。
711 : >>710 >>708 は「同じような質問がなくなると思う」って言ってるんだよ
712 : こんなのセオリーっていう程のものでもないけど、 全部書いてたらテンプレだけで1000いきそうだよ。
713 : Dim arr() As String arr = Split(wk, vbCrLf) で配列に改行でsplitした値を格納しましたが この配列の数を取得するにはどうしたらよいでしょうか? arr.Length count(arr) いずれも vba だと認識されません。
714 : 自己解決
715 : >>713 もしもし桃白白です、桃白白に聞いちゃう? じゃあ桃白白が教えちゃう。 Function Count(a) As Long Count = UBound(a) - LBound(a) + 1 End Function
716 : >>715 すみません。 ほわいとぴーちさん 自己可決しました。
717 :2012/11/02 可決したのか。それは良かった w
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
Google App Engine for java (266)
【初心者歓迎】C/C++室 Ver.80【環境依存OK】 (550)
日本語プログラミング言語『なでしこ』スレ5 (813)
リファクタリングをただのコード修正と思ってる人へ (274)
OpenGLスレ Part18 (925)
Pythonのお勉強 Part47 (755)
--log9.info------------------
最も可愛い生物はうささんに決定しました (924)
【こけ】にわとりってかわいいね 6羽目【こうろう】 (794)
………我が家にイモリがやって来た………【その5】 (540)
アジアンスネークを語るスレ2 (512)
レプティリカスを語るスレ4 (487)
イシガメについて語ろう 10 (331)
【オオトカゲ】 モニター総合スレpart6 【大蜥蜴】 (693)
Hoshi Family異常な動物愛護 (548)
【両爬】HBM&ぶりくら&JRS10【祭典】 (803)
レオパードゲッコー・ヒョウモントカゲモドキ36匹目 (216)
【虹の橋(笑)】痛いハムスター飼育者【ちっこ(笑)】 (364)
ペット禁止物件でうさぎを飼う屑 (219)
札幌のペットショップを語るスレ。パート2 (975)
グリンパイ★ツリーパイソン・ボア専門★エメツリ (903)
ヨウム好き集まれ【11羽目】 (537)
【アホロートル・メキシコサラマンダー】ウーパールーパーpart25 (792)
--log55.com------------------
FX初心者スレ Part131
【バーチャル詐欺師】Manager2525監視スレ8
インデックスファンド Part196
【水風呂】珍法使いはエアコン無し467【扇風機】
【株板相場師列伝】かっこいいおじさん男3838
【株板相場師列伝】バーロー始まった男3838
【海外BO】ハイローオーストラリアpart94【アフィ禁】
【FX】どうしたら勝てるようになった?159勝目