[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 04/22 19:53 / Filesize : 149 KB / Number-of Response : 514
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part12



1 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 19:07:54 ]
ExcelのVBAに関する質問スレです

前スレ pc12.2ch.net/test/read.cgi/tech/1241885130/

★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)

445 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:43:14 ]
Cells.selectのCellsは、Cellsコレクション

>444
Cells(3, 2).Range("B2").Activateって書けたね、スマソ

>コレクションもオブジェクトだコラ
それはそうだが、
コレクションはCountできるが、オブジェクトはCountできないし
オブジェクトにNameはあるが、コレクションにNameはない

446 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 13:46:21 ]

             /)
           ///)
          /,.=゙''"/   
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /




447 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 14:13:24 ]
>>445
お前もう何も書くな

448 名前:432 mailto:sage [2009/08/12(水) 14:18:12 ]
なるほど。
勉強になりました。

ありがとうございます。

449 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 16:52:27 ]
>>445
マジなのかジョークなのか、判断に苦しむ。

450 名前:デフォルトの名無しさん mailto:age [2009/08/12(水) 17:49:21 ]
はじめまして
LineInputでファイルを一行づつ読み込みたいのですが
読み込みたいファイルがUNIXのファイルなんで改行がLFとなり一行と認識してくれません。
一行ごとに読みたいのですが何かいい方法ありますか?

451 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:06:22 ]
>>450
変数に読み込んでからvblfで分割がいいのでは?>>215あたりを参照

452 名前:デフォルトの名無しさん [2009/08/12(水) 20:54:40 ]
ワークシートを呼び出すとき、
Sheet1のようなオブジェクト名で呼ぶのと、
Sheets("名前")で呼ぶのとでは、
動作が異なる場合がある?なぜ?

Sheet1(名前は"テスト"):
Sub test(X As TestType)
MsgBox X.a
End Sub

標準モジュール:
Type TestType
a As String
End Type
Sub test()
Dim X As TestType
X.a = "ほげ"
Call Sheet1.test(X) '動く
Call Sheets("テスト").test(X) '動かない
End Sub

なるべくシート名を使いたいのだが…

453 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:56:02 ]
>>452
詳しい人が来るまでの繋ぎに気付いた点をレスすると
シート名と言ってもオブジェクト名としてのシート名と表示上のシート名は多分別物で
VBEで「sheet1(うんじゃらげ)」の前半が多分オブジェクトとしてのシート名。
プロパティーウィンドウから変更できた気がするようなしないような。

質問のケースへの対応なら
表示上のシート名からインデックス番号を取得してそれを使うのが早いかな?Byなんちゃって回答者



454 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:09:47 ]
>>453 ありがとうございます、
Sheet1と書いたのはオブジェクト名としてのシート名、
Sheets("テスト")は表示上のシート名です。

オブジェクト名もプロパティウィンドウから変更できるのを
いま知ったので、今後はオブジェクト名だけを使えば解決、だけど、
ここまで全部、表示上のシート名で書いてきたから変更がめんどいのと、
上記の動作が異なるメカニズム自体を知っておきたくなって。

455 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:52:17 ]
Sheet1はクラス、Sheets("sheetname")はWorkSheetオブジェクト


456 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 23:10:33 ]
又、オブジェクト指向の話かww

457 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:05:49 ]
>>455 だと、なんで>>452のようになるの?

458 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:09:02 ]
>>455
Sheet1は事前バインディング、Sheets("テスト")は実行時バインディング


459 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:21:06 ]
>>455
Excel2000(VB6.0)でも再現したからそれはない

460 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:41:12 ]
>>459
vb6.0にクラスの概念がないと思っている人?

461 名前:458 mailto:sage [2009/08/13(木) 00:41:15 ]
失礼、
>>458>>452宛で

462 名前:452 mailto:sage [2009/08/13(木) 00:57:14 ]
>>458 ありがとうございます。
Excel VBAでのオブジェクト指向の理解が足りないので
十分には理解できてませんが、教えた頂いたキーワードでググったら、
何が問題なのかはちょっとわかりました。

シートの参照は、どちらでもいい場合は
事前バインディングになるSheet1のほうがメリット多そうなので、
以後なるべくこちらを使うことにします。

463 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:06:26 ]
>>460
>>455が暗黙のインスタンスのことを言っていると解釈した上でのレスだ




464 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:15:52 ]
formsコレクション知ってるならいいよ。

465 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:22:09 ]
>>464
ごめ。いみふだ。なしで。

466 名前:デフォルトの名無しさん [2009/08/13(木) 12:37:06 ]
Excel2003/XP

配列で質問させてください。

Dim myArray() As Variant
Dim r As Long

r = Range("C1").End(xlDown).Row
ReDim myArray(r)
myArray = Range("C1:C" & r)

MsgBox myArray(1) '←エラー発生

End Sub

Msgboxでエラーとなるのですが、原因はmyArrayが2次元
配列になっているのが原因でした。

ステップインで確認すると
myArray = Range("C1:C" & r)
の時にローカルウィンドウの型で確認すると2次元になってしまいます。

何故配列myArrayは2次元になってしまうのでしょうか?


よろしくお願いします。

467 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:38:19 ]
セル範囲を流し込んだから
仕様

468 名前:466 mailto:sage [2009/08/13(木) 13:31:03 ]
>>467

仕様でしたか・・・

レスありがとうございました。

469 名前:デフォルトの名無しさん [2009/08/13(木) 17:11:11 ]
検索する時に検索値に変数を代入するにはどうしたらいいのでしょうか?
例えば、変数Aに「りんご」を代入し、ワークシート全体から「変数A」で検索して「りんご」を探したいのですが・・・

470 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 18:58:46 ]
検索をマクロで記録して、 "" で囲まれてる文字列の部分を、
ダブルクオーテーション外して変数名にすれば良いのさ。

471 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:29:27 ]
ユーザー設定ボタンをツールバーに組み込んでるんですが、
ボタンでトグル動作、例えば書式の太字や斜体みたいのやりたいのですが、
マクロ内でボタンが押される度に画像を変えて、状態を記録してってやらんとダメでしょうか?
プロパティとかでトグルボタンが設定できて状態が読めたりするとうれしいのですが

472 名前:デフォルトの名無しさん [2009/08/13(木) 23:00:29 ]
インプットボックスを使って20個の整数を入力して、大きい順に並べ替える
プログラムを作りたいんですが、簡単に作れますかね??

VBAはほとんど素人で、今勉強を始めたばかりです。。
とりあえずコレは明日までに仕上げたいんですが、

473 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:15:19 ]
>>472
割と簡単だけどズブの素人が明日までに仕上げるのは無理かも



474 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:26:24 ]
>472

アキラメロン♪

475 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:58:36 ]
ひんとやるわ
Sub test()
Dim lst As New Collection

lst.Add (InputBox("1:"))
lst.Add (InputBox("2:"))
lst.Add (InputBox("3:"))
lst.Add (InputBox("4:"))
lst.Add (InputBox("5:"))

For Each v In lst
'ここでソートしてね
Debug.Print v
Next
End Sub

476 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 00:13:30 ]
>>472
作ってみたよ。

Option Explicit

Sub 整数を入力して大きい順に並べ替える()

Dim aaa As Integer

For aaa = 1 To 20

Cells(aaa, 1).Value = Application.InputBox(Prompt:="数値を入力してください", _
Title:="数値入力", _
Type:=1)

Next

Range("A1:A20").Sort _
Key1:=Range("A1") _
, Order1:=xlDescending _
, Header:=xlGuess _
, MatchCase:=False _
, Orientation:=xlTopToBottom _

End Sub

477 名前:デフォルトの名無しさん [2009/08/14(金) 03:51:41 ]
>>475

>>476


本当にありがとうございます。

お二人に神のご加護があらんことを!



478 名前:デフォルトの名無しさん [2009/08/14(金) 03:58:38 ]
今のところ、まだIF文とかfor文までしか理解できてないんで、2人の文にあった関数調べて頑張ります!


本当助かりました!



479 名前:415 mailto:sage [2009/08/14(金) 09:58:19 ]

>>431
ヘルプは質問前に項目名で検索してみましたが、関係ない物ばかりで
目的の物は出てきません。

「スパテク○○系」というのが「ExcelVBAスパテク368」のことなら
読んできましたが載ってませんでした。

「スパテク○○系」というのがこれではなく、他に確実に載ってるものがあるなら
出来れば内容を教えて欲しいところですが、せめて正式な書籍名だけでも教えてください。

確実に載ってる書籍が無いなら、引き続きここで >>415 をお願いします。

480 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 12:02:35 ]
>>471
application.commandbars.コントロール

じゃいかんかね

481 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:23:05 ]
>>480
それをヒントに頑張ったらでけた
CommandBarButton.State にボタンのON−OFFがあった
ありがとう

482 名前:デフォルトの名無しさん [2009/08/15(土) 12:43:39 ]
すいません教えてください

FileCopy D:\aaa.txt, "C:\aaa.txt"
これでD直下にあるaaa.txtファイルをC直下にコピーするという事ですが

これだとどうしてもaaa.txtというファイル名を指定しなければなりません
これを
FileCopy D:\aaa.txt, "C:\"
みたいにaaa.txtをC直下にそのままの名前でコピーさせたい場合ってどうすればいいのでしょうか?

483 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 13:38:13 ]
>>482
どんなシチュエーションかわからんけど
第一引数でファイル名を指定する必要がある以上ファイル名は既に分かっているはず

例えば
filename="aaa.txt"
FileCopy "D:\"&filename,"C:\"&filename
みたいなんだとダメなん?

あとはFileCopyじゃなくてFileSystemObject使うとか



484 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 14:48:42 ]
>482
用途が分からんけど
Source = "D:\aaa.txt"
Destination = "C:\"

'Sourceからファイル名のみを取出す処理をここに記述

FileCopy Source, Destination & FileName

とすればいいんじゃない?

ファイル名のみを取出すのは、文字列関数なんかを使えば
できると思うけど......


んで 自分ならこうするってのを参考程度に
作ってみた(Dir関数を使用)

Dim Source, Destination, FileName
Source = "D:\aaa.txt"
Destination = "C:\"
FileName = Dir(Source)
If FileName <> "" Then
    FileCopy Source, Destination & FileName
   Else
    MsgBox (Source & "が見つかりません")
End If

485 名前:デフォルトの名無しさん [2009/08/15(土) 14:53:36 ]
EXCEL2003,XPsp2です。

次のコードが実行時エラー1004になります(2行目)。

c=5
Columns("3:" & c).Select

列選択の範囲を可変(実行時決定)にしたいのですが、
どうすればよいのでしょうか。

よろしくお願いします。



486 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:33:50 ]
>485
なんかColumnsの使い方間違っているような
あんまし詳しくないんでなんとも言えないけど

Range使っちゃだめなケースなの?

487 名前:485 [2009/08/15(土) 16:10:43 ]
>>486
レスありがとうございます。

3列からc列まで選択できれば、何でも結構です。
ちなみにRangeだと、どうすれば良いのでしょうか?


488 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 16:13:43 ]
>>487

つマクロの記録

489 名前:486 mailto:sage [2009/08/15(土) 16:41:19 ]
>487
このケースは、VBAを使う上での基本中の基本だとおもうので
調べてくださいとしかいえません。

 >1 の★5 と★6 を熟読の事

490 名前:487 [2009/08/15(土) 17:07:16 ]
>>488,489
レスありかどうございます。

マクロの記録には、

Columns("3:5").Selectと出てきます。

c=5
Columns(〜c〜)とは出て来ません(変数を使ったコードは出てこない)。

どうすれば良いのでしょうか?


491 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:24:58 ]
>>490
>>(変数を使ったコードは出てこない)。

出てくるわけネーダロw


492 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:47:37 ]
>>490
dim c as string

c = "5"

でどうでしょう?

493 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:49:02 ]
>>487
ヒント

range ( , )
columns(3)
columns(c)
.select



494 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:06:48 ]
>>493
492ですができました。
勉強になりました。
ありがとうございます。

495 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:16:48 ]
マクロの記録をすると
Columns("C:E").Select
ってでてくるよ

>>492
"3:" & c
&は文字の結合だから

496 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:19:09 ]
Columns("3:5").Selectって記録マクロでできるか?
Range("3:5").SelectとかRange("3:5").Selectならわかるが、Columns("3:5")は動かんなぁ。
記録マクロが動かんマクロになるわけないと思うが。


497 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:20:03 ]
493で答え出とるがな

498 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 18:20:14 ]
すまん、Range("3:5").SelectとかRows("3:5").Selectの間違い。

499 名前:492 mailto:sage [2009/08/15(土) 18:22:07 ]
すいません。
僕のは間違えです。

500 名前:486 mailto:sage [2009/08/15(土) 19:17:25 ]
>>495 へのレス
>>490 >>495 は同一人物だと仮定してレスします 別人だったらすみません。

  >>490
   >マクロの記録には、
   >Columns("3:5").Selectと出てきます。

  >>495
   >マクロの記録をすると
   >Columns("C:E").Select
   >ってでてくるよ

なんかレス番によってマクロの記録結果が違っているのですが....
Columns("3:5").Select って本当に記録された?

501 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 20:07:43 ]
ヒント 列と行を広辞苑で調べてみようっ!


502 名前:デフォルトの名無しさん [2009/08/15(土) 21:34:46 ]
オブジェクトやプロパティやメソッドの検索の基本的なやり方を教えて頂きたいです。

オブジェクトブラウザ
インテリジェンス
ウォッチ
ヘルプ、MSDN、Google

等々ありますが、これらの強み弱み、表示できない事、表示できる事を、
上手くまとめて頂けないでしょうか。

ウォッチでは実行時のプロパティーは表示されるけど、
何故か一部のプロパティーが表示されないし、
メソッドは当然の如く表示できません。

オブジェクトブラウザやインテリジェンスは、
実行時系プロパティーが当然取れません。
隠しオブジェクトについては、表示する様にすれば表示できますが。

ヘルプは実行時系も隠しもメソッドも全てあると思いますが、
検索性に難ありで、網羅性や信頼性に疑いを持ってしまう所アリ。

間違いがあったり、足りない所があれば教えて頂きたいです。

アーリーバインディングやレイトバインディングとか、
その辺りとの関わりも良く分かって無いです、
教えていただけると助かります。

503 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:32:48 ]
宿題は自分で頑張ってね。



504 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 22:34:06 ]
>>502

ググレカス

505 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:30:05 ]
質問です
一つ目
選択範囲のセルをオブジェクト変数に代入するにはどうすればよいでしょうか?
Dim aaa
aaa = Selection
としてもaaaにはvalueしか入らず、文字列の配列になってしまいます。

二つ目
選択範囲の全てのセルに対し、
長さが5じゃなければそのセルに文字列""を代入するというコードを書いてみましたが
aaa = ""
の行で「実行時エラー'10'
この配列は固定されているか、または一時的にロックされています」
というエラーが出ます。どういう風に書けばよいのでしょうか?
また、aaaの文字列の配列に直接値を入れたとしてもselectionに反映されません。これもどうすればよいのでしょうか?
勉強中に作ってみたものなので、特にこのコードを使って何かを処理するわけではありません。
コレクションをうまく使ってみたいと思っています。
よろしくお願いします。

Sub a()
Dim aaa
Dim m
aaa = Selection

For Each m In aaa
If Len(m) <> 5 Then
aaa = ""
End If
Next

End Sub


506 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:51:17 ]
>>555

Sub test()

Dim rng

Set rng = Selection

For Each cell In rng
If (Len(cell) <> 5) Then
cell.Value = ""
End If
Next

End Sub


507 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 23:55:21 ]
>>506
おお、すごい!ありがとうございました

508 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:34:34 ]
>>505 はオブジェクト指向の考え方を一度学んだ方が良いと思う
今後も、できねー、なんで?を連発の予感

509 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:37:25 ]
dimで宣言するなら型までだな

510 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:39:51 ]
>>509
同意
更に option explicit を入れないと何となく動くけど、変なエラーが・・・になる

511 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 00:46:42 ]
C使ってるとこの表現忘れがちになるな
俺だけかな

512 名前:415 mailto:sage [2009/08/16(日) 08:44:11 ]

既に目を通してくれた方には煩わしいかもしれませんが
未解決のまま流れているので再投させていただきます。

オートシェイプに背景画像を挿入する場合についての質問です。

手動でやる場合、
・オートシェイプの書式設定
 ・塗りつぶし
  ・色
   ・塗りつぶし効果
    ・図
     ・図の選択
で、画像を挿入した際に、同ページに
 □図の縦横比を固定する
 □図形に合わせて塗りつぶしを回転する
というオプションがありますが、このオプションをVBAで変更する方法を教えてください。

マクロの記録をしても、変更が記録されずに困っています。

WindowsXP/Office2003

513 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2009/08/16(日) 09:01:18 ]
drawingobjectでどうだ








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<149KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef