1 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 04:56:43 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1228372971/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
2 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 04:57:08 ] 過去スレ 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/
3 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:36:10 ] あー、またコピペしちゃったよ、この馬鹿
4 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 18:19:49 ] On Error Resume Nextってことで
5 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 18:23:07 ] 投げっぱなしにするな インラインで処理しろ
6 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 06:04:01 ] 淫乱で処理?
7 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 17:27:40 ] イランで再処理?
8 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:47:53 ] On Error GoTo 0ってことで
9 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:55:52 ] Newって昔のBASICだとソースプログラム消去なんだよな。 一番使い方の変わった予約語の一つだろうな。 F5で実行ってのはPC-8001の時代から変わってないのが面白い。
10 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:21:08 ] 多次元連想配列というか、dictionaryに配列挿入して捜査は無理ですか? 自作関数作ったりしたんだけど、やっぱりobjメソッドで配列を取りだして操作ができなくて。 何かに使うとかではなくて、好奇心なのでお気軽な回答を頂ければ幸いです。
11 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:08:05 ] よくわからん、具体的なコードで
12 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 00:42:33 ] こんなか? Option Explicit call hoge call hogehoge sub hogehoge() Dim a(2) a(0)="apple" a(1)="berry" a(2)="cucumber" dim d set d=CreateObject("Scripting.Dictionary") d.add(1),a dim f for each f in d(1) wscript.echo f next end sub sub hoge() Dim a a=Array("apple","berry","cucumber") dim d set d=CreateObject("Scripting.Dictionary") d.add(1),a dim f for each f in d(1) wscript.echo f next end sub
13 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 02:50:47 ] >>12 何の言語?
14 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 06:02:29 ] ある列に下と同じ文字があればそのセルの下にあるラインの消去を行う。 また、ある列に上の値と同じ文字があれば行の高さを80とする ある列に下と同じ文字があればそのセルの下にあるラインの消去を行う。 また、ある列に上の値と同じ文字があれば行の高さを80とする プログラムを作ったが動きません。 どこが間違っているのか、だれか教えてください。 For N = 1 To LastRaw 'LastRaw は最終行 If WorkSheets("OutPut").cells(N,12).value = WorkSheets("OutPut").Cells(N+1,12).value Then WorkSheets("OutPut").Cells(N,12).xlEdgeBottom = False ElseIf WorkSheets("OutPut").cells(N,12).Value <> WorkSheets("OutPut").cells(N+1,12).value And WorkSheets("OutPut").Cells(N,12).value <> WorkSheets("OutPut").Sells(N-1,12).value Then Rows("N:N").Select Selection.RowHeight = 80 End If Next エクセル 2003 XP です。
15 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 06:08:31 ] 誤 また、ある列に上の値と同じ文字があれば行の高さを80とする 正 また、ある列に上の値と同じ文字が無くまた 下にも無ければ、行の高さを80とする
16 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:27:14 ] >>14 1 With Worksheets("OutPut") 2 For N = 1 To LastRaw 'LastRaw は最終行 3 If .Cells(N, 12) = .Cells(N + 1, 12) Then 4 .Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone 5 ElseIf .Cells(N, 12) <> .Sells(N - 1, 12) Then 6 .Rows("N:N").RowHeight = 80 7 End If 8 Next 9 End With 1行目 全体をWithで囲めば、いちいちワークシートを指定しなくてもよくなる 3行目 Valueは省略可能。ただしこれは初心者にはおすすめしない 4行目 罫線の消し方はマクロの記録で調べる 5行目 この時点で下とは違うことが判明してるから上だけ調べればいい 6行目 いちいちSelectしない。ワークシートの指定が抜けてる あと、行番号(左端の数字)は消さなくても丸ごとコピペで動くよ
17 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:32:02 ] ごめん。タイプミスとかあったんで上げ直し With Worksheets("OutPut") For N = 1 To LastRaw 'LastRaw は最終行 If .Cells(N, 12) = .Cells(N + 1, 12) Then .Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then .Rows(N).RowHeight = 80 End If Next End With
18 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:35:35 ] For N = 2 To LastRaw 'LastRaw は最終行 ↑ にしないと、1行目と2行目が違ってた時に0行目を調べようとしてエラーになる
19 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:48:28 ] >>14 VBAって論理式のショートサーキットしないんだっけ? だとしたらこうかな?1行目の扱いが今ひとつ不明なんでループから出した。 With Worksheets("OutPut") If .Cells(1, 12) = .Cells(2, 12) Then .Cells(1, 12).Borders(xlEdgeBottom).LineStyle = xlNone EndIf For N = 2 To LastRaw 'LastRaw は最終行 If .Cells(N, 12) = .Cells(N + 1, 12) Then .Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then .Rows(N).RowHeight = 80 End If Next End With
20 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:49:52 ] うわ、逆だった… With Worksheets("OutPut") If .Cells(1, 12) <> .Cells(2, 12) Then .Cells(1, 12).Borders(xlEdgeBottom).LineStyle = xlNone EndIf For N = 2 To LastRaw 'LastRaw は最終行 If .Cells(N, 12) = .Cells(N + 1, 12) Then .Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then .Rows(N).RowHeight = 80 End If Next End With
21 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:53:05 ] まだおかしい。何度もすまん。こんどこそ… With Worksheets("OutPut") If .Cells(1, 12) = .Cells(2, 12) Then .Cells(1, 12).Borders(xlEdgeBottom).LineStyle = xlNone Else .Rows(1).RowHeight = 80 EndIf For N = 2 To LastRaw 'LastRaw は最終行 If .Cells(N, 12) = .Cells(N + 1, 12) Then .Cells(N, 12).Borders(xlEdgeBottom).LineStyle = xlNone ElseIf .Cells(N, 12) <> .Cells(N - 1, 12) Then .Rows(N).RowHeight = 80 End If Next End With
22 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:54:02 ] 試してから書き込め
23 名前:デフォルトの名無しさん [2009/02/25(水) 14:30:58 ] セルA1〜セルA10にある一次元の要素と セルZ1〜セルZ10にある一次元の要素を 一つの二次元配列に格納する方法を教えてください><
24 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 14:42:25 ] >>23 dim v() as variant dim i as long v()=range("A1").resize(10,2).value for i=1 to 10 v(i,2)=cells(i,"Z").value next i
25 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:50:38 ] VBAはショートサーキットしないね。(現状では)
26 名前:デフォルトの名無しさん [2009/02/25(水) 17:50:59 ] グラフのマーカをRGB関数で現したいです ネットでも『RGB関数を使うと近い色になる』との答えが多く、 自分でも試したのですがその通りでした 良い方法があればご教授ください OSはXP エクセルは2003です
27 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:52:31 ] VBAから秀丸マクロを呼び出すことって可能ですか?
28 名前:デフォルトの名無しさん [2009/02/25(水) 18:13:30 ] RSS.EXEを起動していないなら、RSS.EXEを実行するというマクロ を書いてください。よろしくお願いします。
29 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:28:33 ] お断りします。
30 名前:デフォルトの名無しさん [2009/02/25(水) 19:55:57 ] 書けもしない香具師の、わざわざの断り口上、ごくろうwww
31 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:56:43 ] Absolutely not.
32 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:25:09 ] >>26 ヒント パレット
33 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:35:11 ] >>27 可能です。
34 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:42:25 ] どうやれば呼び出せますか?
35 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:36:51 ] >>28 そのロジックはまずいよ > RSS.EXEを起動していないなら、RSS.EXEを実行するというマクロ の途中でもしRSS.EXEが起動したら2重起動になっちゃう
36 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 23:54:14 ] >21 ありがとうございました。 参考にして 成功しました。
37 名前:26 [2009/02/25(水) 23:59:13 ] カラーパレットは56色までなので無理という事でしょうか? 以下のマクロできれいなグラデーションの様なグラフを作成したいのです Sub test() Dim aaa As String Dim i As Integer aaa = ActiveSheet.Name '仮データ作成(1列目に1〜225の数字を入れる−−−−−−−−−−−−−−−−−−−−−−− For i = 1 To 225 Cells(i, 1) = i Next 'グラフ作成−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− Columns("A:A").Select Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet3").Range("A1:A225"), PlotBy _ :=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:=aaa ActiveChart.HasLegend = False 'マーカの色付け−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− For i = 1 To 225 ActiveChart.SeriesCollection(1).Points(i).Border.Color = RGB(0, i, 225) ActiveChart.SeriesCollection(1).Points(i).MarkerBackgroundColor = RGB(0, i, 225) ActiveChart.SeriesCollection(1).Points(i).MarkerForegroundColor = RGB(0, i, 225) Next End Sub
38 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 00:15:11 ] >>37 フルカラー使いたいなら画像を貼り付けるかExcel2007に乗り換え
39 名前:デフォルトの名無しさん mailto:28 [2009/02/26(木) 00:24:59 ] >>35 このマクロを必要とする場面は、RSS接続をせずに現在使用中のマクロを実行すると 外部接続確認メッセージの応答を300回しなければならなくなるのを回避するためです。 2重起動は、RSS.EXEの場合は、やっても問題は発生していませんので、気にしてません。 shellと変数名の扱い方が肝腎かなとは思っているのですが、さっぱり、出来なくなっている のでここに来ました。
40 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 00:35:32 ] >>39 基本、アプリの起動確認はAPI使わないと無理。まずはこのあたり読んで勉強汁 ttp://www.happy2-island.com/excelsmile/smile04/capter00302.shtml
41 名前:39 [2009/02/26(木) 15:53:02 ] >>40 サンクス。踏ん切りがつきました。APIでやります。
42 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 19:21:46 ] それってExcelのDDEInitiate(app, topic)でやってる話じゃないの? appがなければ起動する。 その場合appがPATHにないと失敗する。 なので、RSS.EXEのショートカットを作って ファイル名をapp.lnk、RSS.EXE.lnkかRSS.lnkか、にして PATHに置けば済む話とちゃう?
43 名前:39 mailto:sage [2009/02/26(木) 20:34:24 ] office.microsoft.com/ja-jp/access/HA012288201041.aspx を読むと、返値がとらえられるということなので、そうゆう話です。 DDEInitiateやDDEの初期化に関することも、他の場面で調べてたことはあるのですが いつも、形にならないまま終わってしまうので、ついつい、丸投げ質問形になります。 土日になりますが挑戦してみます。
44 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 21:51:25 ] >>40 嘘つくな。wshの方が簡単。 ttp://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_03.html
45 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:05:12 ] ,.=-''' ̄ ̄ ̄ ̄ ̄ ̄` -、 / \ ./ .\ { } .| / ̄""''-=,,,,_,,,,,,==-'''"\ | .l, .( ,. - ' .、 ,. - , .} | l > ,=ニ\ ゛ | ''゛_,=ヘ、 r' {_ /~''i //_\_..`7| l、{''″/__`>ヽ |r`i l .{`|./ ヽ二・ニゝチ、 ! .ゝrニ・二r } ! i l { {(l { ノ | | ヽ :: }| ソ/ ヽヽ|.{ / | | \ i.|// \|.i / ,,.. | l._,, . \ i !/ 乂i / - (__,)-゛ ' {丿 .l .!、. ,. !., ., / | 人 \ .!''''" ̄~ ̄`''! / 人 ./ | .\ ,\ '-"" ゛-' / / | .ヽ ノ .{ \ .ヽ,., .: ,イ / } ヽ -'″ l `' 、`.───″ .} ヽ
46 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:54:05 ] >>44 それは > RSS.EXEを起動していないなら の答えになってないだろ?
47 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:40:33 ] >>46 全般的な使い方じゃなくて、 このこの方法で起動した分だけ気にすると言う要件なんじゃないの?
48 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 02:16:49 ] 何を言ってるのか全然わかりません
49 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 15:44:21 ] わからないときはするーしよ
50 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 16:54:21 ] >>47 勝手に条件不可するなや
51 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 17:12:53 ] 和文解釈能力と和作文能力には相関関係ありや?
52 名前:デフォルトの名無しさん [2009/02/28(土) 00:15:42 ] OS:Win98 2000 XP 2003server vistaで Ver:Excel2000 2003 2007についての質問です。 VBAはコードサイズに限界がある(?)のであまり複雑な事はさせられない という話を聞いたのですが、具体的にどのくらいなのでしょうか? コマンドボタンやテキストボックス等にイベントをガシガシ記述していたら ワークシートへの入力がほとんどないにもかかわらず気が付いたらファイルサイズが1MBを超えていました このくらいならどうという事はないと思うのですが、ふと気になりました。 よろしくお願いします。
53 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 09:01:12 ] 300MB超えるときつい。
54 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 13:07:42 ] 入門書は大村あつしのがいちばん分かりやすいんですか?
55 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 13:49:24 ] >>54 へたくそでもとにかく動けばいいってレベルを目指すならいいんじゃない?
56 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:06:01 ] 入門書なら谷尻かおりがいいよ。 概念も説明してくれるので、プログラム初心者でも読めるから。 他のは使い方の説明ばっかで使い物にならない。 最近はvbaの入門書を探したときないから、 このごろ出版されたものについてはどうだか知らないけど。
57 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 14:09:29 ] ちなみに、大村あつしがダメって意味ではない。 大村あつしの本を使ったことがないだけ。
58 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:30:59 ] 本って使うものなのか
59 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:56:59 ] 枕とか?
60 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 18:02:48 ] 使うだろ
61 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:02:38 ] 文学書は読むが技術書は使うだろ?
62 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:41:49 ] エロ本もな
63 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:11:03 ] 俺の場合 拝むな
64 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:15:25 ] 技術書を1回読んで終わりってパターンはあるな。
65 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:09:34 ] 誰が書いた本でも良いから、初級→中級→上級 と、3冊くらい読むのが良いよ。 レベルアップして行くのは当然として、3冊読んでみると同じ事が書かれているのが分かると思う。 「これ読んだからいらねー、飛ばそ」 じゃなくて、同じ内容を復習も兼ねて読んでみる事。 同じ事が書かれているって事は、それだけ重要な概念って事だからね。 あと、実例集やサンプル集は買う必要無い。裏ワザ系の本もいらない。 他の人が作ったプログラムを改編するだけじゃ自分の物にならない。 んで、基本的な概念が理解出来たならば、自分の業務に特化した本を買いあさると良いよ。 (今はネットで調べる方が便利だけど)
66 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:36:09 ] >>65 VBAに中級とか上級とかの本があるかねえ・・・?
67 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 14:33:22 ] 谷尻かおりだか誰だか忘れたがとにかく女性の書いた本だったと思うが、中身を本屋で立ち読みしたらかなり下手糞だった。 やっぱ女は駄目だなと思ったよ。
68 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:39:05 ] 奈良お前が書いてミロのビーナス こき下ろすだけなら馬鹿でもできる
69 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:18:28 ] そんなのイランの核開発
70 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:32:33 ] >>66 マクロって何?なレベルの本 ↓ OBJや変数が分かるレベルの本 ↓ VBSやWIN32APIの呼び方が分かるレベルの本 ↓ 業務で必要なジャンルに特化した本 な感じで良いんでないかい?
71 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:18:29 ] >>70 > マクロって何?なレベルの本 > ↓ > OBJや変数が分かるレベルの本 > ↓ > VBSやWIN32APIの呼び方が分かるレベルの本 ここまで、ピンクいろのざっくりした入門書に載ってたレベルじゃね?
72 名前:デフォルトの名無しさん [2009/03/01(日) 22:56:51 ] 教えてください。 A1に1入れたらB1に丸一個 A2に2を入れたらB2に丸二個というようにAに数字を入れたら自動でBに○を数字分いれる式を作りたいのですがどのようにすればよろしいでしょうか。
73 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:22:00 ] >>72 >>1 >★2 ExcelのVBA以外の部分に関する質問はNGです。 > 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
74 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:41:58 ] >>72 =LEFT("○○○○○",A1)
75 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 00:19:30 ] >>74 このコードはアツイ。 煽りじゃなくて、マジでこの考え方好きだ。
76 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 07:37:35 ] うん、おもしろいw でも○が5個までしか表示できない件について。 rept関数にすれば幸せw
77 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 11:21:27 ] 発想の転換とか出来るやつはマジ羨ましい
78 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 23:29:54 ] 無駄な転換をしてしまうのはどうかと この場合、ワークシート関数のREPT、VBA関数のStringと 目的そのままの関数があるのに、わざわざ弊害がある方法へと転換しなくても・・・・・
79 名前:デフォルトの名無しさん mailto: [2009/03/03(火) 12:33:41 ] S="" For I = Cells(1, 1) S = S + "○" Next Cells(2, 1) = S
80 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 13:48:07 ] >>79 1個前のレスぐらい読めよ
81 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:51:12 ] >>79 なんつーでたらめw
82 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:01:26 ] マクロを起動するとOUTLOOKで特定の相手にメールを送る処理って作れませんか? OSはXP、EXCELは2003です。
83 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:03:33 ] 多分それが 発想の転換なんだと思っているんだと 思う
84 名前:謝礼男 [2009/03/03(火) 22:17:41 ] 解決してくれた方にはマジで現金振込みで謝礼します。 解決スピードにもよりますが2万なら余裕で出せます。というかそれ以上に困ってます。 助けてください。クビになりそうです。 マクロあんまり詳しくないのにネットで探していじってたらわからなくなりました。 ■現状:会社の機密書類に誤ったPASSをかけてしまいファイルが開けず困っています。明日取引先のプレゼンで使う資料が多数あって明日朝までに開けないとマジで上司に殺される。てかクビ。 ■背景:上司のPCのエクセルファイルに全部passをかけてと頼まれたが1000個くらいあったので、マクロを使ってpassをかけようとした。途中までは順調だったが途中からpassが謎なものになってしまい、開けない。 ■行動:とりあえずありえそうなpassは入力。フリーソフトでpass解読試みるが解読できず。 ■依頼:可能性としてマクロが誤作動したのが原因ではないかと考えられるため、マクロ詳しい方にありえそうな誤作動ぶりを解明して、パスを解明してもらいたい。詳細は↓
85 名前:謝礼男 [2009/03/03(火) 22:18:20 ] ■詳細:簡単に説明すると 指定したフォルダ(D1)にあるエクセルファイルに指定のpass(C4)をかけるというマクロ また別のマクロを使ってD列にはPC内のフォルダを列挙しており、上記作業が終われば次のフォルダに移動する。 で、実行したのが以下のマクロ
86 名前:謝礼男 [2009/03/03(火) 22:18:46 ] Private Sub CommandButton1_Click() Dim c As String Columns("A:B").Select Selection.ClearContents Range("C1").Select Selection.ClearContents Range("A1").Select a = Range("D1") b = Dir(a & "\*", 2) ChDir a For l = 1 To 300 If b <> "" Then Cells(l, 1).Value = b
87 名前:謝礼男 [2009/03/03(火) 22:19:32 ] If (Right(b, 3) = "xls") Or (Right(b, 3) = "XLS") Then c = a & "\" & b On Error Resume Next Workbooks.Open (c) If Err.Number = 0 Then Workbooks(b).Activate ActiveWorkbook.SaveAs Filename:=c, _ FileFormat:=xlNormal, _ Password:=Range("C4").Value, WriteResPassword:="", ReadOnlyRecommended:=False, _CreateBackup:=False, _ ConflictResolution:=True Workbooks(b).Close Cells(l, 2) = "○" Else Cells(l, 2) = "×" End If Else Cells(l, 2) = "×" End If b = Dir(, 2) Else l = 300 End If Next Cells(1, 3) = "終了" Range("D1").Select Selection.Delete Shift:=xlUp End Sub
88 名前:謝礼男 [2009/03/03(火) 22:20:35 ] ■実際にした作業 ・当初:マクロのとおり。ボタンクリックして、置き換えますかのyesをクリックして次へ次へ。 ・途中1:そもそもパスがかかっているやつがあってそのファイルを開くpass入力求められたときは 面倒だったのでescおしてpass入力画面消して、置き換えますかのyesボタンも面倒になったのでyキー連打。 ・途中2:さらにマクロ実行のコマンドボタン押すのが面倒になったので、マクロにショートカットキーをつけることに。 プライベートサブにショートカットのつけ方がわからず、 以下のマクロをプライベートサブではなくて普通のモジュールのマクロとして保存(macro1)し、macro1にショートカットキーを付加。ちなみにショートカットは ctrl+y ・途中3:↑のショートカットを使いctrl+yおしてescとyを連打する作業。 そしてその結果わかったのが。 プライベートサブでなくしてからは、passがかかっていない。(ほぼ全部) しかし、時々passがかかっていて、なおかつ指定したpassではなくなっていた。 ってな感じでpassがわからなくなりました。 長文駄文失礼しましたが、本当に困っており、助けてくれる方をお待ちしています。 本気で謝礼いたしますので、なにとぞよろしくお願いします。 ちなみにwin2000のエクセルはなぜか97でした・・・・・
89 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:41:56 ] >>88 新規ブックに Private Sub Workbook_Open() MsgBox "一身上の都合により退職させていただきます。" + vbCrLf + _ "僕の事は探さないで下さい。[2009/3/3]" End Sub
90 名前:デフォルトの名無しさん [2009/03/03(火) 22:47:29 ] 解決ですな。
91 名前:デフォルトの名無しさん [2009/03/03(火) 22:49:41 ] ざっくりと見たところ、対象xlsのC4セルでパスワードかけるんじゃね。これ。 なので、「元エクセルのC4の内容」が必要かと・・・ パス有xls触ったこと無いが・・・ デバッグで対象xls開いた後のC4が元パスになってるか見てみてくれ。
92 名前: ◆Q7C7fXiwHY mailto:sage [2009/03/03(火) 22:51:46 ] >>84-88 シートモジュールにマクロを置いた場合、Range("C4").Valueはそのモジュールが属するシートのC4になるが 標準モジュールにマクロを置いた場合、Range("C4").Valueはアクティブシート、つまりこのコードでは パスを掛ける対象ブックのアクティブシートのC4になる パスを掛けたブックの内容が解らないと、具体的なパスの予測は不可能 多少なりとも内容を覚えているか予測できるなら、その値を試してみることだ ブックを送ってくれるなら、そこらのフリーソフトより強力な強制解除を試してみても良いが、 機密書類と言うからにはそれは無理だろうし、強制解除は不正にも使えてしまうから、 強制解除方法自体を教えるのも無理だ それに、その背景と現状でバックアップすら無いなら責任は上司の方が重いぞ
93 名前:デフォルトの名無しさん [2009/03/03(火) 22:51:49 ] んで、解決方法だが、 Public void TaisyokuProc()みたいな処理が必要かと。 元xlsねーのか?
94 名前:謝礼男 [2009/03/03(火) 22:53:18 ] >>91 糸口サンクス。 しかし、C4には本来のpass(仮にabc)がはいったままなんだが 開かないファイルはそのパス(abc)にはなっていないんだ。 ちなみに当初成功した分ははabcで開きます。
95 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 22:54:37 ] OpenOfficeをダウンロードして、Excelファイルを開いてみたら? もし、開けたら別名で保存。
96 名前:>>91 [2009/03/03(火) 22:55:30 ] >>91 ん〜とね、 ActiveWorkbook.SaveAs Filename:=c, FileFormat:=xlNormal, _ Password:=Range("C4").Value, ここのrange(c4)が対象ExcelのC4内容ではないの?という意味。 つまり、対象C4で暗号化してるんではないかと・・・
97 名前:謝礼男 [2009/03/03(火) 22:56:20 ] >>92 ありがとうございます。 91さんのおっしゃっていた事もこれ読んでちゃんと理解できました。 プライベートじゃないから 元エクセルを参照してしまったということなんですね。 自分の無知具合に唖然です。 正直元ファイルの内容はほぼわからないので、解読は不可能そうですね。
98 名前:91 [2009/03/03(火) 23:01:27 ] グーグル先生で「excel パスワード 解除」でGigazineのやつ試してみたら? うまくいくかもよ。がんがれ!
99 名前:デフォルトの名無しさん [2009/03/03(火) 23:07:54 ] バイナリエディタかあらパス設定されてるワークブックを開いてみる。 そのなかからDPB=って文字列を検索してみそ。 その中のDPB=に挟まれたわけわかめの者がパス ってのでいいんじゃないのかい???????? みなさんどうおもうよ この惨めな男に慈悲あたえてあげようじゃないの
100 名前:デフォルトの名無しさん [2009/03/03(火) 23:33:18 ] >>99 謝礼さんではないが、俺のExcel2000で[保存]-[ツール]のパスワードだと、DPBって無いんだが・・・ それって、マクロロックじゃまいか? 2000使ってるのは突っ込まないでくれ。軽いんだよね・・・