VBA総合質問スレッド

このエントリーをはてなブックマークに追加
205190
すいません、
つっこまれると思ってたんですけど、それ(A,1)です
206190:2006/08/02(水) 01:03:41
>>204
どの辺が理解出来ないのでしょうか?
207デフォルトの名無しさん:2006/08/02(水) 01:04:05
> Workbooks("OpenFileName").Worksheets("PG1").cell("1,1").Copy Workbooks("book1").Worksheets("TP1").Range("1,1")
めちゃくちゃ
208デフォルトの名無しさん:2006/08/02(水) 01:05:23
>>205
出直して来い
209190:2006/08/02(水) 01:10:08
>>207
これでも勉強したつもりなのですが。
出来ればどの辺りがオカシイか教授いただけませんか?
無理なら無理で結構ですので
210190:2006/08/02(水) 01:10:42
いや、勉強したつもりはオカシイ。勉強してる最中ですね。
211デフォルトの名無しさん:2006/08/02(水) 01:20:36
>>210
作業をさせたいところのみを早く調べたいのはわかるけど
ググれば初心者向けにVBA解説してるところとか、サンプルコードを載せて
くれてるところがあるはずだよ。
先に言われている通り、、かなり滅茶苦茶だから面倒臭がらずに調べて
みよう。
212デフォルトの名無しさん:2006/08/02(水) 01:22:52
そんなあなたに
やりたいことを
マクロに記録
して勉強しましょう
213デフォルトの名無しさん:2006/08/02(水) 01:57:55
セルの操作は基本中の基本だよ。
cell("1,1")もRange("1,1") もRange(A,1)も間違ってます。

>>212
マクロの自動記録は無駄が多いし、セル操作を学ぶには不向きだよ。
214デフォルトの名無しさん:2006/08/02(水) 02:03:47
誰も正解を書かない件について。

# やりたいことがわからないというレスは却下
215 ◆MutsukiYtk :2006/08/02(水) 02:11:01
>>213も言ってるけどさ、基本的な命令(予約語)ってExcelに入力すると頭文字が大文字になるのね。
それを踏まえて、さっきから貼ってる自分のソースを見てごらん。
それと自分が初心者だという自覚があるなら、コピーとペーストを命令分けて書いて
ステップ実行させなさい、そうすりゃどっちがおかしいかわかるから。
Range文の間違い、わからなければヘルプを。
明らかにヘルプを見る手間を省いた質問に、優しく答える人は少ないよ。
 
つ〜か指摘してるっぽい人達もなんでcell()に触れないのかわからん…
216デフォルトの名無しさん:2006/08/02(水) 02:15:21
>>215
ステップ実行って、あんたあれ1行だぞ
217デフォルトの名無しさん:2006/08/02(水) 02:16:36
> マクロの自動記録は無駄が多いし、セル操作を学ぶには不向きだよ。
セル操作を学ぶレベルには到底達していないのだが
それに無駄以前のレベル
間違いに気付ければ丸儲け
218190:2006/08/02(水) 02:22:21
グダグダ言わずに正解おしえろよ、クズども
219 ◆MutsukiYtk :2006/08/02(水) 02:22:59
>>216
コピーとペーストに分けて、って書いただろ
 
面倒だから書くわ
Workbooks("Book2.xls").WorkSheets("Sheet1").Cells(1,1).Copy _
(Workbooks("Book1.xls").WorkSheets("Sheet1").Range("A1"))
220デフォルトの名無しさん:2006/08/02(水) 02:27:23
>>577
> Sub HideColumns(xcolumns As String)
> Dim strColumns As String
> strColumns = xcolumns
> columns(strColumns).Select
> Selection.EntireColumn.Hidden = True
> End Sub

>>578
> Sub HideColumns(strCcolumns As String)
>  Columns(strColumns).EntireColumn.Hidden = True
> End Sub

上記は別スレの内容だけど
無駄であっても、
個々の内容が理解できていないと無理
そうでないと、ちょっと変えただけで???となるでしょ
最初のうちは、あえて無駄な行があってもいいと思うけどな
221 ◆MutsukiYtk :2006/08/02(水) 02:28:03
>>190
悪い事は言わん。手でコピペしとけ。
CellsとRangeも使えなくて出来るほど
VBAはガキのおもちゃじゃない。
これは君への皮肉じゃなく本心だ、>>213も同じように思って書いたんだと思うぞ
222デフォルトの名無しさん:2006/08/02(水) 02:31:15
>>221
ウザ
223デフォルトの名無しさん:2006/08/02(水) 04:02:23
◆MutsukiYtk
224213:2006/08/02(水) 07:00:20
「セル操作が出来ないと、Excelで何も出来ないな」と思って書きました。
どこが間違ってるか分からないと探しにくいだろうと思って
セル操作に関して間違っている箇所を上げておいただけなのですが…。
225190:2006/08/02(水) 13:12:51
>>221
Cellsでしたか。ありがとうございます
ガキではないですが、もう少し勉強してからここに来ることにします
226デフォルトの名無しさん:2006/08/02(水) 19:16:33
クイックソートを再帰を使わずに書きたいのですがよく分かりませんorz
A列の配列を並び替えたいのですが・・・
227デフォルトの名無しさん:2006/08/02(水) 20:07:28
>>226
逆に聞くけど、再帰使わない利点って何なの?
228182:2006/08/02(水) 20:30:08
レスください・・・・・・。
184でマクロさらしてます。
229デフォルトの名無しさん:2006/08/02(水) 20:54:42
>>226
よく解らないということは、全く解らないわけでは無いんだな。
んじゃ、丸投げしないで出来てる部分だけ晒せ。話はそれからだ。
というか、コードを書くことだけに走らないで、まずはクイックソートの
アルゴリズムをきちんと理解しろ。


>>227
高速化だろ。Subプロシージャの呼び出しって結構遅い。Functionはもっと遅いけど。
あと、配列要素の上下限算出を盛り込める。
一般的にクイックソートは「配列, 配列要素下限,配列要素上限」などと3つの引数を渡すが
再起使わず内部ループにすると、プロシージャの頭で上下限算出すればいいから配列変数だけポンと渡せる。


>>228
さようなら。
230デフォルトの名無しさん:2006/08/02(水) 21:18:01
>>228
たぶんVBAでは無理なのでWin32APIを呼ぶ
231226:2006/08/02(水) 21:52:30
>>227
大量のデータを処理する時は再帰だとできんとか言ってました。

>>229
内部ループのとこを詳しく教えて頂きたいのですが
232デフォルトの名無しさん:2006/08/02(水) 21:54:54
>>231
クイックソートでググればたくさんでてくるぞ

アルゴリズムが理解できないなら
VBのコードもあったからそれコピペすれば?
233226:2006/08/02(水) 21:56:03
>>232
どうもです。やってみます。
234デフォルトの名無しさん:2006/08/03(木) 02:19:55
学校の授業で VBAを使ってゲームを作る事になったんですが、VBAの事をほとんど何も教えてもらって無い状態で、作業が全く進みません

生徒もやる気が無いけど、それ以上に教師にやる気が無くて困っています
頑張って、本に書いてある通りにプログラムを打ち込み、シューティングゲームを作ったんですけど、ありえないぐらいクソゲーで、もう自分の力ではどうしようも無い、ということを悟りました

ですので、どこか いいプログラム置いてある場所知りませんか?
邪道かもしれませんが、それをコピーして貼り付けよう思います

どなたかお願いします
235デフォルトの名無しさん:2006/08/03(木) 13:13:55
>>234
お前は。
236デフォルトの名無しさん:2006/08/03(木) 19:42:10
俺か。
237デフォルトの名無しさん:2006/08/04(金) 09:09:28
学校に行ってるって事は、お金払って教えてもらってるんだよね。
「お金払ってるんだから、きっちり教えて下さい(義務を果たして下さい)」とか言ってみたらどう?
まぁなかなか言いづらいけどさ。
親が払ってるのか自分で払ってるのか分からないけど
汗水流して得たお金払ってちゃんと教えてもらえないなんて、腹立たない?
238デフォルトの名無しさん:2006/08/04(金) 09:30:55
【Excel 2003】
Workbooks.Add で新規作成したブックの
ThisWorkbook モジュールに、
Workbook_SheetChange 等のイベントを記述する方法を
どなたかご存じないでしょうか?
239デフォルトの名無しさん:2006/08/04(金) 10:31:15
>>238
ひんと:あたまをつかえ
240238:2006/08/04(金) 10:47:43
>>239
意外と簡単に実装できるってコトですか・・・?

まさか、
コードウインドウ開いて入力するとか、じゃないですよね?

Workbooks.Add したブックへ自動的にWorkbook_SheetChange 等のイベントを
挿入したいんですが・・・。

当たり前のことを聞いてたら申し訳ありません。
241デフォルトの名無しさん:2006/08/04(金) 11:56:17
>>239
わかった上で言ってるんなら是非とも教えて欲しい。
少なくとも簡単に実装できるものではないと思う
>>240
Addではなく、既にSheetchange等マクロが入ったファイルをコピーするのではダメか?
中のソースをいじらせる必要があるのか?
方法が思いつかないわけじゃないが、試した事がないからな。とりあえず>>239先生の回答を待ってみてくれ
242238:2006/08/04(金) 12:45:40
>>241
ファイルをコピーするのは思いついてはいるんですが、
一応、ブック単体での動作を予定しているので・・・。
VBとかみたいにリソースファイルを扱えるならよかったのですが・・・。
243デフォルトの名無しさん:2006/08/04(金) 12:46:35
>>238
それマクロウイルスの第一歩やん。
なんか設定変えれば使えるようになるはず↓
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbext98/html/vaobjCodePane.asp

ただ、>>241さんの方法(ブックコピペ)が可能ならそれが一番よいと思う。
244238 :2006/08/04(金) 12:59:38
>>243
ウイルスか、
まぁ、確かにそうですよね。
限りなく実現不可能そうですね。
参考URLも見てもう一度検討してみようと思います。
245243:2006/08/04(金) 13:13:33
追加したブックのイベントを受け取るのが目的なら、
クラスモジュール使ってexcel全体のイベントをもらう事が事が可能なので
それを使ってみると言う手もあると思います。

実は私もこの作業を行おうと思っているところですんで詳しくは無いですが、
そう難しくも無いみたいですよ?
ttp://www.moug.net/skillup/opm/opm08-04.htm

ただ、追加したブックを「一人歩き」させたいならこの方法はダメですね。
246238:2006/08/04(金) 13:45:32
>>245
おお、その手がありましたか。
私のほうも追加したブックを独立させて動作する必要は無いので
参考になりそうです。
ありがとうございます!
247デフォルトの名無しさん:2006/08/05(土) 00:02:40
>>229
A列を並べ替えるならsortメソッドが最速じゃないか?
248デフォルトの名無しさん:2006/08/05(土) 01:53:08
今からVBA始めるって人にお勧めする参考書や教材って何かないかな?
249名無しさん@お腹いっぱい。:2006/08/05(土) 02:07:29
> A7:自分で実際に読んで(閲覧して)、自分のレベルに合っていて解りやすいと思うものを利用しましょう。
250デフォルトの名無しさん:2006/08/05(土) 06:25:07
>>248
VBAの本なんて星の数ほどあって
その中で自分の知ってる本はほんのわずか。
しかもどんどん新刊が出て入れ替わる。
とても特定の本をお薦めできる状態じゃないね。

一つの方法として、アマゾンのサイトで検索してみて
売れている純に表示させ、読者レビューを読んでみる
といいかも知れない。当てずっぽうで買うよりマシだろう。
251デフォルトの名無しさん:2006/08/05(土) 08:17:37
どうせ、1冊ですむはずも梨
252デフォルトの名無しさん:2006/08/05(土) 13:37:28
>>250
どんな言語でもそのような状況なのに、なぜお勧め本が存在するんだろう?
253デフォルトの名無しさん:2006/08/05(土) 14:36:52
まず1冊買う。
難しすぎると感じたら、易しそうな本を買う。
易しそうなら、その本の内容を理解しつくして、難しそうな本を買う。
ちょっとだけ難しいなと思ったら、その本がたぶん正解。理解するまでがんばる。
以下繰り返し。
254デフォルトの名無しさん:2006/08/05(土) 15:27:17
>>250
言ってる意味が良く分からない
255デフォルトの名無しさん:2006/08/05(土) 15:29:07
大村なんてらの本買っときゃ、まず間違いない。
256デフォルトの名無しさん:2006/08/05(土) 18:27:59
>>252
簡単に言うと「面倒臭いから」
257デフォルトの名無しさん:2006/08/06(日) 10:05:50
VBAでOLEは使えるのでしょうか?
258デフォルトの名無しさん:2006/08/06(日) 12:30:14
>>257 なぜ試そうとしない?
259デフォルトの名無しさん:2006/08/06(日) 13:07:58
       ____
     /⌒  ⌒\   ング ング
   / (●)  (●)\
  /::::::⌒(__人__)⌒:::: \  チュパチュパ
  |     (   \    |
  \_   ヽυ  ::\ /
         \  .:::\
260デフォルトの名無しさん:2006/08/06(日) 13:30:22
>>258
OLEのツールボックスの出し方さえわからないのです・・・orz
初心者プログラマにOLEは敷居がたかいのかな・・・
261デフォルトの名無しさん:2006/08/06(日) 13:31:38
君の跳躍力が一般人よりk
262デフォルトの名無しさん:2006/08/06(日) 15:03:53
マクロの記録で自動作成されたコードを読むことを繰り返しております。
263デフォルトの名無しさん:2006/08/06(日) 15:16:16
Range("A5").Select
ActiveCell.FormulaR1C1 = "nurupo"
もうあほかと。
264デフォルトの名無しさん:2006/08/06(日) 17:39:24
>>257
VBAでWordやExcelの操作をすることからしてOLEのおかげ。
265デフォルトの名無しさん:2006/08/06(日) 18:24:44
なんか勘違いしてたかも・・・
VBAとブラウザを連動させたかったのですが、
それはOLEで実現するのは間違いなのでしょうか?
エクセル2000でセルの書式で1を0001とか表示させてんのね。
そんでそれをCSVに出力すると1になっちゃうのを0001のまま出力するにゃどうすりゃいいの?
1の書式を文字列にして0001にしても同じじゃんよ?
読み込みはTextFileColumnDataTypesでできたんだけど出力さっぱりわからん
267デフォルトの名無しさん:2006/08/06(日) 19:07:19
そのブラウザがOLEに対応してるかどうかで変わってくるな。
つーか、VBA(VB言語でMS Office Applicationを操作)の話ではなく
普通のVisual Basic(VB言語で汎用的な処理)の分野の話なので本スレでどうぞ。
このへんのやり方は、VBAでやるにしてもVBとやり方変わらないし。
268デフォルトの名無しさん:2006/08/06(日) 19:33:11
>>266
それこそVBAの分野だろ。
ワークブックのメソッドを使ってCSV保存するのなんてVBA使ってるとは言わん。
マクロの記録そのままでもいけるからな。

VBA使ってセルのデータを取得し、テキストに書き出す部分を自前で実装してこそ
VBAを使ってると言える。これなら値の取得を.Valueではなく、.Textにすることで
セルの値ではなくセルの表示結果が取得できる。
269デフォルトの名無しさん:2006/08/06(日) 19:35:35
>>266
ん?俺のExcel2000は
ゼロ付きのままcsv保存されるよ
どうやって保存してんの?
がんばります
>>269
ホントだすげえびっくりした
脳が千切れそうです
273デフォルトの名無しさん:2006/08/07(月) 21:29:23
エクセルでファイルを開くと同時に、VBAを起動する為には
SUBとEND SUBの間にどう入力すればいいでしょうか。
274デフォルトの名無しさん:2006/08/07(月) 21:37:07
Workbook_Open()?
275デフォルトの名無しさん:2006/08/07(月) 21:53:48
Sub Auto_Open()
…………
End Sub
276デフォルトの名無しさん:2006/08/08(火) 00:34:25
Sub miko_test()
 Dim i As Integer, j As Integer, n As String, nn As String
 Application.ScreenUpdating = False
 i = Sheets.Count         
 n = ActiveWorkbook.Name    
  For j = 1 To i       
  Sheets(j).Copy       
 nn = ActiveSheet.Name    

   With ActiveWorkbook
   .SaveAs "C:\My Documents\" & nn
   .Close
  End With
 Next
 Application.ScreenUpdating = True
End Sub

すみません。これが動かないのはなぜですか?
277デフォルトの名無しさん:2006/08/08(火) 00:37:09
勘:Activeを使うとろくなことがない
278デフォルトの名無しさん:2006/08/08(火) 00:39:22
どーいうことですか?
はじめてVBAを使おうとしてます。。
明日会社で必要なの。だれか教えてください!
279デフォルトの名無しさん:2006/08/08(火) 00:50:58
>>278
nn = ActiveSheet.Name

nn = Sheets(j).Name
280デフォルトの名無しさん:2006/08/08(火) 01:13:05
うまくいかなかったにしても自分でやってみたこと(組んだ数式やコード)は書きましょう。
例えエラーになる式やコードでも、何をやりたいのかを的確に把握する手がかりになります。
その上で、どううまくいかないのかを具体的に書きましょう。
エラーが出るなら、何処でどういうエラーが出るのか、
想定外の結果が出るなら、条件と想定上の結果、実際の結果などを詳しく書いてください。
281デフォルトの名無しさん:2006/08/08(火) 01:17:31
>>276
パスがねえんだろ
おまいのマイドキュメントはホントにそこにあんのか?
282デフォルトの名無しさん:2006/08/08(火) 06:43:12
>>277
全くだな。
283デフォルトの名無しさん:2006/08/08(火) 08:28:29
ところで、n=ActiveWorkbook.Nameは必要なの?
284デフォルトの名無しさん:2006/08/08(火) 08:55:59
>>281
Win98ならそこだろ。
285デフォルトの名無しさん:2006/08/08(火) 12:25:42
Copyメソッドに何かが足らない
たぶんソレ

シート毎に分割して保存するならな
リストボックスで右寄せにすると一番右の字がスクロールバーに隠れちゃうのってデフォなん?
回避する方法ある?
287デフォルトの名無しさん:2006/08/08(火) 21:09:40
>>286
うぉぉぉおぉ本当だ!!今まで気づかなかった。
スクロールバーが無いときを基準に右寄せしてるっぽいね。
消極的にいくと..全ての値の後に空白入れるとか、ラベルとSpinbuttonで擬似的に作るか..
288287:2006/08/08(火) 21:22:10
案2(思いつき):ColumnCountを2にしてうまいこと調整する
値だと後ろに空白入れることできないんじゃん?できるのかな?
文字列にして後ろに入れればいいんかな?
290287:2006/08/08(火) 23:11:30
>>289
色々試してみたけど、やはり Column.Count=2 で二列目に空白データぶち込んで
ColumnWidth = (リストボックスの幅-15) ; (10) に指定すると中々よい感じ。
なんだが、スクロールバーが出ない少ない量になると不自然な空白が現れる。
あと、環境によってスクロールバーのデカさが変わってくると....
291デフォルトの名無しさん:2006/08/09(水) 01:48:09
Public Const WM_USER As Long = &H400
Public Const WM_CAP_START As Long = WM_USER
Public Const WM_CAP_FILE_SAVEDIBA = WM_CAP_START + 25
Private Declare Function SendMessageAsString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

Public Function capFileSaveDIB(ByVal hCapWnd As Long, ByVal FilePath As String) As Boolean
capFileSaveDIB = SendMessageAsString(hCapWnd, WM_CAP_FILE_SAVEDIBA, 0&, FilePath)
End Function

↑で、クリップボード中の画像をファイルにして保存したかったりするわけですが

FilePathを---\hoge.bmp にすると約800KBのファイルが出来ます
FilePathを---\hoge.jpg にしても約800KBのファイルが出来ます

これ、どうにかなりませんか
せめて1/5ぐらいのサイズになりませんか

どこかで見つけたDoodle2というDLL使うと
bmpとjpgではかなりサイズに差が出るんですけど、できればこのDoodle2使わずに。。。無理ですか?
292デフォルトの名無しさん:2006/08/09(水) 03:48:13
>>291
※文句は受け付けません。
Sub jpgsss()
Dim jaws As Chart
Set jaws = ThisWorkbook.Charts.Add
jaws.Paste
Debug.Print jaws.Export("c:\2ch.jpg", "jpg")
End Sub
293デフォルトの名無しさん:2006/08/09(水) 04:38:48
ありがとうございます
サイズは1/10ぐらいまで縮めることが出来ました

Debug.Print jaws.Export("c:\2ch.jpg", "jpg")

Debug.Print jaws.Export("c:\2ch.jpg", "jpeg")
ですよね
いや、そんなことはどうでもいいんですけど

このやり方は、まず貼りつけちゃうわけですよね
これってグラフ?
で、何というか、その。。。あ、いえ何でもないです
おやすみなさい
294292:2006/08/09(水) 04:52:33
>>293
まだしばらく起きてるので答えられる範疇だったら何でも答えますよ。
295デフォルトの名無しさん:2006/08/09(水) 13:24:14
質問です。
アクティブになっているシートからグラフを作りたいんですが
どのようにすればいいですか?
とりあえず、ここまで作ったんですが、よろしくお願いします!
  Charts.Add
ActiveChart.ChartType = xlXYScatterSmooth
ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("A1:G4354"), _
PlotBy:=xlColumns

ActiveChart.SeriesCollection.NewSeries

ActiveChart.SeriesCollection(1).XValues = "=sheet1!R2C1:R4354C1"
ActiveChart.SeriesCollection(1).Values = "=sheet1!R2C2:R4354C2"

ActiveChart.SeriesCollection(1).name = "=""系列1"""

With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "HD"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "xxxxx"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "yyyyy"
End With
296デフォルトの名無しさん:2006/08/09(水) 13:58:58
>>295
つ マクロの記録
297295:2006/08/09(水) 14:22:29
マクロの記録を使ってもシート名が出てできないんです
助けてください
298デフォルトの名無しさん:2006/08/09(水) 14:26:06
>>297
マクロの記録ができないんだったら、それはマクロでは書けないという事じゃないかな。
299デフォルトの名無しさん:2006/08/09(水) 14:44:57
マクロの記録だと始めからアクティブになっているからできないんだよ
300292:2006/08/09(水) 14:58:07
一番最初にset なんちゃら =activesheet
にしてActiveChart.SetSourceData Source:=Sheets("sheet1").とかの
sheets("sheet1")の部分を「なんちゃら」に変えてやればよし。

しかしまず、「ActiveChart」という表現を使うのはやめたほうが吉だと思う
301295:2006/08/09(水) 15:25:39
ありがとうございます!

ActiveChart以外の作り方があったら教えてください!
302デフォルトの名無しさん:2006/08/09(水) 17:00:49
>>301
それくらい類推してくれ。「active」で苦しむのを身をもって体感したばかりだろ?
chartも同じように set どーたらこーたら = charts.add
としてあげて、あとは全部withブロックで囲むとか。
みんなスキルすげえなw
304デフォルトの名無しさん:2006/08/11(金) 12:13:45
>>303
>>286 どうなりましたか?
しょうがないので左に列を1個増やして0を入れたです
値が入ってない列入れてもその列無視された