トップページtech
1001コメント371KB

Excel VBA 質問スレ Part14

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2010/01/06(水) 12:34:58
過去スレ
01 http://pc11.2ch.net/test/read.cgi/tech/1054356121/
02 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
0850デフォルトの名無しさん2010/03/26(金) 23:27:15
色んなことをやりたい人がいるんだな
0851デフォルトの名無しさん2010/03/26(金) 23:35:17

このスレはVBAとPerl14

のスレなのになぜPerlネタが一切でてこないんだ?

0852デフォルトの名無しさん2010/03/26(金) 23:49:26
次の質問どうぞ
08538472010/03/27(土) 19:33:47
>>843
もう見てないかもしれないけれど

>>847のコードは
型宣言を 勘違いしてたみたい

変数 X1 X2 Y1 Y2 は Single型もしくはLong型で宣言するべきだった
Integer型だと少数点以下がカットされるので線が少しずれてる

さっきヘルプを見ていて気づいた
ゴメンね
0854デフォルトの名無しさん2010/03/28(日) 03:21:33
シェイプ関連の位置指定は、ポイント単位だからなあ。
て、Longも駄目だろw
08558472010/03/28(日) 10:55:03
>>854
がーーーん
またまたすみません
たっ たしかにそうでした
回答者に向いてないかも俺

さすがに落ち込みました
0856デフォルトの名無しさん2010/03/28(日) 11:02:37
ドンマイ。よくあることだw
0857デフォルトの名無しさん2010/03/28(日) 21:05:10
質問です。
CSVファイルをエクセルブック内のワークシートに貼り付けするとき、

Workbooks.Open Filename:=csvfile
Workbooks(csvfile).Worksheets.Copy after:=Workbooks(mybook).Worksheets("ファイル一覧")
Workbooks(csvfile).Close

こんな感じで簡単に貼り付けています。
csvファイルが5MBとかサイズが大きくても上のようなやり方で問題ないでしょうか。
csvファイルの先頭から1レコードずつ取得して貼り付けるという方法もネットから探し出せたんですが
どっちがいいのか判断しにくいです。
0858デフォルトの名無しさん2010/03/28(日) 21:07:57
ExcelVBA開発がメインの人っているの?
趣味とか、基本的にはVBとか、やけにできる事務員とか、そんな感じですか?
0859デフォルトの名無しさん2010/03/28(日) 21:21:12
自称やけにできる事務員ですw
0860デフォルトの名無しさん2010/03/28(日) 21:35:38
英単語が並べられている列があり、隣の列に意味を書き出す、というのを作っています。
使用する英語の辞書のURLはhttp://www.alc.co.jp/です。
「apple」という単語を検索するとURLは
http://eow.alc.co.jp/apple/UTF-8/?ref=sa
となります。
ここで、英単語を検索した結果表示されたページから該当箇所を抜き出すというやり方が分かりません。
上記の「apple」の場合、「・apple」から「分節ap・ple」まで抜き出したいのです。
やり方がわかる方教えてください。

0861デフォルトの名無しさん2010/03/28(日) 22:09:20
>>860
* データの転載は禁じられています。
class="midashi"
0862デフォルトの名無しさん2010/03/28(日) 22:25:22
>>857
5MBのCSVなんて動作遅くならないか?
速さをなんとかしたいならsqlでやる。
0863デフォルトの名無しさん2010/03/29(月) 00:28:17
>>860
VBA上から Webページのデータを取得するのは
そのWebページのソースを見て理解できないと無理
(そしてそれをどうVBA上からコントロールするかも)

ソースをみたけど
<DIV class=mr_10 id=resultList ondblclick=seow()>
ってのがあるから
id=resultList ←これを利用すれば

「・apple」から「《コ》アップル・メニュー」
までは抜き出せるね
あとはタグを辿っていくしかないかな
0864デフォルトの名無しさん2010/03/29(月) 13:57:45
>>858
やけにできる事務員だった
データの正規化やコピーする際に絶対にミスしないのが魅力的
速度自体は大して変わらん
0865デフォルトの名無しさん2010/03/30(火) 10:59:35
1ブック内に複数あるシート全てを選択した状態で、且つ一シート目にのみ開始ページ番号が振られている状態で
印刷したときに割り振られるページ数を、印刷せずにマクロで調べたいのですがどのような方法があるでしょうか?
このシートのこのセルは何ページ目に該当する、ということを調べて行きたいです。
プレビューで見ていけば可能ですがページ数が膨大なのでマクロで処理したいと思っています。
08668652010/03/30(火) 11:02:54
すいません、バージョンは2000です。
0867デフォルトの名無しさん2010/03/30(火) 13:47:33
>>865
『このシートのこのセル』はそもそもどうやって特定するの?
1シートで印刷するのは複数頁あるってこと?
08688652010/03/30(火) 16:43:41
>『このシートのこのセル』はそもそもどうやって特定するの?
全シート走査で特定単語を置換していくので、
その置換処理が行われたときのセルを元に出力時のページをその都度
調べてワークファイルに書き出したいと思っています。
(置換処理、書き出す処理はできてます)

>1シートで印刷するのは複数頁あるってこと?
そうです。
1シートに1頁の場合と複数頁ある場合とがあります。
0869デフォルトの名無しさん2010/03/30(火) 20:18:53
特定単語を置換する前に
検索→セル番地取得→セル番地から頁数割り出し
という作業をかませばいいんでないの?
08708652010/03/30(火) 21:13:16
>>869
「セル番地から頁数割り出し」の部分がわからないんです…
0871デフォルトの名無しさん2010/03/30(火) 21:41:45
一度、印刷プレビューで1頁で何セル印字するのか調べてみたら
0872デフォルトの名無しさん2010/03/30(火) 22:13:52
使った事ないけど

VPageBreak オブジェクト
HPageBreak オブジェクト
なんかどう?
08738722010/03/30(火) 23:30:03
ちょっとテストしてみたけど 頁数割り出しの参考にならないかな

Sub test()
 Debug.Print "改ページ数:"; ActiveSheet.HPageBreaks.Count

 For Each a In ActiveSheet.HPageBreaks
   Debug.Print "改ページ 行位置:"; a.Location.Row
 Next

End Sub
0874デフォルトの名無しさん2010/04/02(金) 07:24:45
Application.OnTimeでサブルーチンを時間起動したいのですが、
セルをダブルクリックして値入力状態であったり、モーダルで
バルーンを表示させていたりすると、Application.OnTimeに制御
が移らず、サブルーチンを起動できません。
これを回避する知恵をお持ちの方、ご教示願います。
0875デフォルトの名無しさん2010/04/02(金) 16:52:52
回避するって
>セルをダブルクリックして値入力状態であったり、モーダルで
>バルーンを表示させていたりすると、
はどうするねん
別にexcel.applicationを起こしてそっちでontimeさせればええやん
0876デフォルトの名無しさん2010/04/04(日) 19:32:11
XPsp2,EXCEL2003です。

ピボットテーブルをVBAで作成しているのですが、
データによって(件数?)、集計の仕方が、
「個数/金額」になったり、「合計/金額」になったりします。
常に「合計/金額」になるようにするには、どうすれば良いのでしょうか?

コードは次の通りです。

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"ZZZWORK!R5C" & c_yymm_p & ":R" & lastrow & "C" & c_io_p).CreatePivotTable TableDestination:="", TableName:= _
"ピボットテーブル4", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("ピボットテーブル4").ColumnGrand = False
ActiveSheet.PivotTables("ピボットテーブル4").AddFields RowFields:=Array("分類", "科目") _
, ColumnFields:="年月"
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _
xlDataField
Application.CommandBars("PivotTable").Visible = False
ActiveWorkbook.ShowPivotTableFieldList = False

よろしくお願いします。

0877デフォルトの名無しさん2010/04/05(月) 02:29:05
>>876
ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Function = xlSum
08788762010/04/05(月) 08:04:46
>>877
レスありがとうございます。

そのコードを追加したら、

実行時エラー'1004':
PivotFieldクラスのFunctionプロパティを設定できません。

になりました。どうすれば良いのでしょうか?

追加した位置は、下記のステートメントの次です。

ActiveSheet.PivotTables("ピボットテーブル4").PivotFields("金額").Orientation = _
xlDataField

よろしくお願いします。
0879デフォルトの名無しさん2010/04/05(月) 12:28:18
>>878
フィールド名の「金額」の部分を自分の作ったテーブルに合わせて書き換える
テーブルの一番左上の灰色のセルの値を見る
0880878=8762010/04/05(月) 17:07:07
>>879
レスありがとうございます。

常に合計になるようにできましたm(_ _)m
0881デフォルトの名無しさん2010/04/05(月) 18:37:42
サブメニューを複数個作りましたが、
どのサブメニューを選択しても、同じSubプロシージャを呼び出したいです。

Subプロシージャ側で、どのサブメニューが選択されたかを知るにはどうすればいいでしょうか?
パラメーターとか使えますか?

参考になるサイトがありましたら紹介していただけませんか。
0882デフォルトの名無しさん2010/04/07(水) 10:22:06
Excel2007の不具合と思われる現象があります。

OS WindowsXP sp2
Excel2007

以下のようなサンプルコードを実行するとVisible=falseにしたはずのBookが「Copyコマンド」発行直後に表示されてしまう。
※「コピー完了」ダイアログ表示時はBookが表示されてしまう。

Private Sub cmdCopy_Click()

Excel.Application.Visible = False

Call Sheets.Copy(Before:=Sheets(1))
MsgBox "コピー完了"

Excel.Application.Visible = True

End Sub

※2007以外のバージョンであれば「コピー完了」迄はBookは隠れたままである。

回避策有りますでしょうか?

同様の処理をAccessからExcelを遠隔操作で処理するとBookが表示された瞬間に、何らかのきっかけでフォーカスが与えられると処理が止まってしまいます。

どなたか回避策を教えてください。
0883デフォルトの名無しさん2010/04/07(水) 13:10:42
VBAで使える言語のリストやそのリファレンスはどこで手に入るのですか?
0884デフォルトの名無しさん2010/04/07(水) 13:15:25
>>883
ヘルプ
なければCDやDVDから追加でインストールする
0885デフォルトの名無しさん2010/04/07(水) 15:01:36
>なければCDやDVDから追加でインストールする
それはどういうものですか?
単独で購入できるのですか?
それとも何かのソフトに付いているのですか?
0886デフォルトの名無しさん2010/04/07(水) 16:28:15
Excelに用意した文字列からマクロでWordの文章内を置換したいと考えているのですが、
Wordの「あいまい検索」にあたるExcelでの関数は何になるのでしょうか?(´・ω・`)

MatchFuzzyを差し込んだらエラー吐いたんですが、Excelにはコレ無いのかな??
0887デフォルトの名無しさん2010/04/07(水) 20:03:05
>>883
2007ではVBAのリファレンスはオンラインヘルプだけになってしまった。
Visual Basic Editorを起動したら、メニューバーのヘルプ→Microsoft Visual Basic ヘルプ→
Excel2007開発者用リファレンス→リファレンスを開くと、全オブジェクトの一覧が出てくる。

もしかしたら、MSDNライブラリにオフライン版があるかもしれんが、俺はよく知らん。
あるんならこっちが教えてほしいぐらい。
0888デフォルトの名無しさん2010/04/07(水) 22:45:38
>>886
エラー吐いたコード と エラー内容 を書きこんだ方が回答がつきやすいかも
0889デフォルトの名無しさん2010/04/08(木) 00:06:13
>>883
そんなもの入手して何するの?
オブジェクトブラウザとヘルプで十分だろ?
0890デフォルトの名無しさん2010/04/08(木) 13:43:55
>>883
おれの使ってる2000の場合は(>>887によれば2003までは)
VisualBasicEditorからヘルプ→MicrosoftVisualBasicヘルプを開けば
オフラインでもリファレンスを参照できた
>>885 CDとはいうまでもなくExcel(またはOffice)のCD-ROMのこと。
以前は、
Excel(またはOffice)の購入=Excel(またはOffice)のCD-ROMの購入
と同等なので
Excelの利用者はExcel(またはOffice)のCD-ROM持ってるはず。
2007以降は削除されたとの事なので、DVDにはないんだろうけど
0891デフォルトの名無しさん2010/04/08(木) 14:22:54
あるよ
0892デフォルトの名無しさん2010/04/08(木) 14:35:25
>>887
ありがとうございます
2002ですがそれと同じ手順で出てきました
もっとも昨日質問してからいろいろやっていて何とかたどり着いていたところでしたが
VBエディターのヘルプを開いても左側のコラムは出ない初期設定(もしくは当初闇雲にいじってそういう設定になってしまっていた)になっていたようです
それを変えると出てきました
0893デフォルトの名無しさん2010/04/08(木) 14:36:11
>>890
ありがとうございます
2002ですが出て来ました
0894デフォルトの名無しさん2010/04/08(木) 17:22:07
質問です。
Excelは2003です。

コンボボックスを配置したシートを複数作り(シートのインデックスは1〜3)、
標準モジュールのauto_openで各シートのコンボボックスの内容を初期化しているんですが、
Excel起動時にauto_open内でSheets(1)のみを認識することができず、
「実行時エラー'32809'」が発生してしまいました。

しかもこの事象は全てのBookで発生するわけではなく、
コントロールをコピペしてきて同様の初期処理を組み込んだ他のBookでは
発生しません。

どなたかこのエラー発生の原因をご存知ありませんか?
0895デフォルトの名無しさん2010/04/08(木) 17:30:54
2003まではOfficeフォルダのvbaxl10.chmをダブルクリックすればVBAのリファレンスを直接見ることができた。
2007では同名のファイルがダミーになってしまったのでヘルプが無くなったと思い込んでる人がいるようだが、
実はzip圧縮されたxml形式で格納されている。
わざわざダミーファイルを置いてる理由は不明。
0896デフォルトの名無しさん2010/04/08(木) 19:11:17
すいませんがよろしくお願いします。
下のような処理で、1〜3、8〜10のどこかにブレークポイントをつければ
2つめのIfの中の処理をしてくれるのですが
はずすと1件も処理しません(3行目のIFでfalseになると思います)
ブレークポイントのあるなしで、なにか制御が変わってしまうんでしょうか?
2007です

1 For rowidx = 20 To lastrow
2  str1 = MotoSheet.Cells(s3row, 1).Value
3 If Len(str1) = 10 Then
4 If Mid(str1,3,2) = "**" Then
5 dcnt = dcnt + 1
6 いろいろ処理
7 End If
8  End If
9 LoopCnt = Loopcnt + 1
10 Next
08978962010/04/08(木) 20:52:00
すいません、質問を取り消します
その上でやってるwebクエリーのせいだと思います。
0898デフォルトの名無しさん2010/04/08(木) 23:36:14
【1 OSの種類】 WindowsXP
【2 Excelのバージョン】 Excel2002
【3 VBAが使えるか】 初心者です
【4 VBAでの回答の可否】 可
【5 検索キーワード】 private sub フォーム 呼び出せない
フォーム1にコマンドボタンを2個付けました。
そのボタンを押すとメッセージボックスでどちらのボタンが押されたかを表示するサンプルです。
フォーム『UserForm1』のコード
Private Sub CommandButton1_Click()
atai = 1
Call 選択表示
End Sub

Private Sub CommandButton2_Click()
atai = 2
Call 選択表示
End Sub

標準モジュール『module1』のコード
Public atai As Integer
Private Sub 選択表示() ’←をSubにすると実行できるがマクロ一覧に出てきてしまう。
If atai = 1 Then
MsgBox "押されたのは上のボタンです"
Else
MsgBox "押されたのは下のボタンです"
End If
End Sub

マクロ一覧に出したくないので『module1』のコードでPrivate Sub 選択表示()としたところ、『Subまたは Functionが定義されていません』とエラーが返ってきます。
Sub 選択表示()とすると実行出来るのですが、フォームからはPrivate Subは呼び出せないのでしょうか?
0899デフォルトの名無しさん2010/04/08(木) 23:46:18
>>898
Private指定したSubやFunctionは、そのモジュール以外の場所から呼び出すことはできない。
逆の言い方をすれば、他から呼び出して欲しくないとき、呼び出せないようにしたいときにPrivateを指定する。

解決策としては、Private Sub 選択表示() はmodule1ではなくUserForm1の中に書く。
0900デフォルトの名無しさん2010/04/08(木) 23:58:45
>>899
わかりやすい説明ありがとうございました。
すべてUserForm1に書いて、「Sub Auto_Open()」 で呼び出します。
誠にありがとうございました。
0901デフォルトの名無しさん2010/04/09(金) 00:33:33
2003 XPです。

sub と function の違いって値を返す返さないの違いとググる先生は言ってましたが、そもそもfunctionの存在意義ってあるんですか?
call subで代用出来るような気がするのですが、理解が難解なのを我慢して使う価値のある代物なのですか?
どういう時に使うのが有効なのかが私の理解力が低すぎて全く見えてこないので、何か良き実例などありましたら教えてください。
0902デフォルトの名無しさん2010/04/09(金) 00:43:47
Left関数とかSubで代用されたらどうなるかを考えてみると良いよ。
逆にそういったものを作る必要が無いならSubで十分。
0903デフォルトの名無しさん2010/04/09(金) 02:19:00
>>901
逆だよ。
SubはFunctionで代用できるけど、逆は難しい、というかかなりめんどくさい。
もしどちらかに統一するとしたら、Subを廃止してFunctionを残すだろうね。

簡単なマクロはSubだけで作ることが多いからFunctionはいつ使うの?って思うかもしれないけど、
自分で作らなくてもシステムに用意されているFunctionを普段からたくさん使ってるんだよ。
たぶん、知識が足りなくて気が付いてないだけ。
0904デフォルトの名無しさん2010/04/09(金) 02:35:11
>>901
たくさんプログラム作ってくうちに理解できるようになるよ。
気が付くと、毎回同じ記述してることあったりするからw
そういうのをFunctionで作っておいて、あちこち使いまわしできると楽になる。
0905デフォルトの名無しさん2010/04/09(金) 06:43:08
やっとできた。こういうことか

Declare Function SetSysColors Lib "user32" (ByVal nChanges As Long, lpSysColor As Long, lpColorValues As Long) As Long
Sub 黒白反転()
Dim rc As Long
rc = SetSysColors(1#, 5#, 0#): rc = SetSysColors(1#, 8#, 16777215#)
End Sub
0906デフォルトの名無しさん2010/04/09(金) 10:06:49
>>887
> 2007ではVBAのリファレンスはオンラインヘルプだけになってしまった。

オフラインコンテンツあるけど?
0907デフォルトの名無しさん2010/04/09(金) 13:27:04
>>895
>2003まではOfficeフォルダのvbaxl10.chmをダブルクリックすればVBAのリファレンスを直接見ることができた。
2002ですが見ることが出来ました
同じく2002のVisual Basic Editorのヘルプで出てくる「Visual Basicのランゲージリファレンス」とはまた違いますね
0908デフォルトの名無しさん2010/04/09(金) 14:43:18
Rangeについてなんですが
Range型の変数にオブジェクトがセットされているかの
判定方法がわかりません。

複数のテキストボックスにセル範囲(a1:g5など)を入力してもらい
unionで繋げているのですが
if tbox1.txt <> "" then
set r = range(tbox1.txt)
end if
if tbox2.txt <> "" then
set r = union(r,range(tbox2.txt))
end if
.
ここでunionの前にRange rにオブジェクトがセットされているかの
判定を入れてtbox1が空白の時の対応をしたいのです
0909デフォルトの名無しさん2010/04/09(金) 15:23:28
Excel2007で、選択範囲内にvbaで
ワードアートを作成したのですが、その設定に

With Selection.ShapeRange.Width = WD * 0.7

(WDの変数にはSelection.Widthがはいってます)

とかやってるんですが、幅が変わらず・・・
ググりつかれました・・・
知っている方がいれば教えてください。
0910デフォルトの名無しさん2010/04/09(金) 15:33:13
2007でヘルプが見れない奴ってF1押しても見れないのか?
オフラインにしてるか?
0911デフォルトの名無しさん2010/04/09(金) 16:10:06
>>910
HDD節約のためにカスタムインストールでヘルプをインストールしない設定にしてるとか
0912デフォルトの名無しさん2010/04/09(金) 16:19:53
>>908
変数 r が

Dim r As Range

のようにRangeオブジェクト型としてきちんと宣言してあれば、r が空なら

If r Is Nothing Then

で判定できる。これが正攻法。
まあ、もうちょっと手を抜くなら

If tbox1.txt <> "" And tbox2.txt <>"" Then
  Set r = Range(tbox1.txt & "," & tbox2.txt)
Else
  Set r = Range(tbox1.txt & tbox2.txt)
End IF

みたいに文字列の段階で結合してしまうのも一つの方法だし、
さらに手を抜くなら On Error でエラーを無視して続行するという手もある。
0913デフォルトの名無しさん2010/04/09(金) 16:28:15
>>909
2007はオートシェイプのマクロが作りにくいからなあ。

(1) そのWithの使い方はおかしい
(2) セル範囲じゃなくてちゃんと図形がSelectされてる?

とりあえず模範解答

ActiveSheet.Shapes("WordArt 1").Select
WD = Selection.ShapeRange.Width
Selection.ShapeRange.Width = WD * 0.7
0914デフォルトの名無しさん2010/04/09(金) 16:35:51
とりあえず、Withを使うとしたらこんな感じかな。

ActiveSheet.Shapes("WordArt 1").Select
With Selection
  WD = .ShapeRange.Width
  .ShapeRange.Width = WD * 0.7
End With
09159082010/04/09(金) 16:51:08
>>912
解決しましたありがとうございます。

IsNothing(r)
IsNull(r)
If r.IsEmpty
If r.IsNothing

などは試していたのですが

If r Is Nothing Then

という書き方があるんですね
勉強になりました。
0916デフォルトの名無しさん2010/04/09(金) 17:23:01
>>913
>>914
レスありがとうございます。

すいません、初心者なもので・・・
言葉足らずだった様ですので、補足です

ActiveSheet.Select

'変数の宣言(位置設定用:上位置、左位置、高さ、広さ)
Dim tp, lf, ht, wd
tp = Selection.Top
lf = Selection.Left
ht = Selection.Height
wd = Selection.Width

ActiveSheet.Shapes.AddTextEffect(msoTextEffect1, "てすと1", "MS P明朝", 18# _
, msoFalse, msoFalse, lf + (wd / 2 - wd * 0.35), tp - 4).Select
0917デフォルトの名無しさん2010/04/09(金) 17:25:12
    With Selection

'フォント内側の色指定
.Characters.Font.Color = RGB(255, 0, 0)
'フォント外側の色変更
.ShapeRange.TextFrame2.TextRange.Font.Line.ForeColor.RGB = RGB(255, 0, 0)
'ワードアートの大きさ調整
.ShapeRange.Width = wd * 0.7
End With
End Sub

上記で一応、指定していると思います。
で、選択範囲の中央付近に文字を持って来て、
文字を選択範囲の割合にたいして伸び縮みさせたいんですが・・・
これではワードアートの文字ではなく、わくの幅のみの変化となり、
文字に影響が無いんです。

excel2007の、ワードアートスタイル-文字の効果-変形-四角の効果
をvbaで指定できれば理想的かと思うんですが・・・

長文すいません
よろしくお願いします。
0918デフォルトの名無しさん2010/04/09(金) 17:50:05
便乗質問ですけど
Dim r As Range で Rが自動で大文字にならずDim r As Rangeとなるのは2003の仕様ですか?
あと、プロパティだとrowsだと大文字になるのにrowだとなりません。
0919デフォルトの名無しさん2010/04/09(金) 17:53:28
× Dim r As Rangeとなるのは
○ Dim r As rangeとなるのは

変数もrだったし例えが紛らわしかったですw ごめんなさい。
Rowsと自動大文字されるのにrowは自動で大文字にならないって事です
0920デフォルトの名無しさん2010/04/09(金) 19:59:21
大文字・小文字の自動変換は割と適当な動きだったような……
うっかり最初に「range」と入れてしまうと、
消した後で改めて大文字で始めても勝手に小文字に直されてしまうとか、
そんな感じじゃなかったっけ?
0921デフォルトの名無しさん2010/04/09(金) 20:42:41
>>919
正しく入力すればちゃんと大文字になる。
ならない時は、どこか間違えてる。はず。
前後の行もよく確認。

>>920
それはユーザー定義名の場合。変数名とか関数名とか。最後に入れた方に自動的に統一される。
0922デフォルトの名無しさん2010/04/09(金) 22:44:29
Excel 2007で試してみたが
1 "dim r as range"と打ってEnter→"Dim r As Range"になる
2 全部削除
3 "dim range"と打ってEnter→"Dim range"になる
4 全部削除
5 "dim r as range"と打ってEnter→"Dim r As range"になる
0923デフォルトの名無しさん2010/04/10(土) 01:01:00
2003でも再現できたわ
rangeが変数名として記憶されちゃったのか
どこまで戻ればリセットされるんだろう

小文字のままでもちゃんとRangeオブジェクトとして動作するから
ソースエディタのバグと言っていいのかな
09249182010/04/10(土) 01:37:24
多くの回答感謝します。
>>922に従って

dim Range(Rは手打ちで大文字)
dim Row(Rは手打ちで大文字)
とバリアントで宣言するとそれ以降は自動変換に戻りました。

逆に、小文字で宣言すると以降の自動変換なくなりました。全く訳の分からない仕様ですw
0925デフォルトの名無しさん2010/04/10(土) 02:18:05
>>924
それは自動変換がなくなったんじゃなくて、小文字に自動変換されてるんだよ
dim rowと入れてからROWと入力するとrowに変換される
0926デフォルトの名無しさん2010/04/10(土) 03:06:19
標準モジュールの宣言セクションで public で変数宣言すると同ブック他モジュールでも宣言有効のはずですよね?
宣言していないモジュールの同名変数に「コンパイルエラー: 名前が適切ではありません」って出て困ってます。
エラーの出たシートの宣言セクションに同じようにpublicで宣言するとエラー回避出来ますがpublicの意味が無い気がします。

とにかく何でも参考にして欲しいので色々書いておくと
@全部標準モジュール
A全部の宣言セクションにOption Explicit
B当たり前だけど変数名とsubもしくはfunctionに同名は無し
Cその変数を一番使ってるシートで宣言しないといけないとかいうルール?
D2003 XP

結構困ってます。宜しくお願いします。
0927デフォルトの名無しさん2010/04/10(土) 04:03:52
>>926
そのエラーは変数のスコープじゃなくてプロシージャ名の重複
ttp://windyakin.if.land.to/src/up38_2022.png
0928デフォルトの名無しさん2010/04/10(土) 06:10:40
>>916-917
Excel2007でワードアートの文字サイズを変更するには

'ワードアートの大きさ調整
.ShapeRange.TextEffect.PresetShape = msoTextEffectShapePlainText '←この1行を追加
.ShapeRange.Width = wd * 0.7
09299262010/04/10(土) 10:34:21
>>927
ここで質問する前、最初自分で調べた時も確かにそんな事書いてあったんですが、
でも実際変数が青囲み(選択状態?)になってエラーメッセージが出て困ってココに来たと・・・

勿論変数と同名のプロシージャ・プロシージャ名の重複は無しだったはずなんですが。
0930デフォルトの名無しさん2010/04/10(土) 11:21:31
ソースの一部だけでも晒してみたらどう?特にエラーになってる部分だけでも
0931デフォルトの名無しさん2010/04/10(土) 17:36:59
不可解な現象がありますので、お分かりの方いましたらご教示ください。

二つのブックを開いている状態で、裏側に隠れている方のブックをマクロで
OnTimeを使って自動クローズします。
(この際、Before_Close内部で一部のシートを非表示にします。)
次にそのブックを開いたとき、シートが未選択の状態(シートが表示される
領域部分が真っ白)になってしまうのですが、解決手段はありますか?
0932デフォルトの名無しさん2010/04/10(土) 17:46:30
使ったらきちんと終わらせる。
これだけだ。
0933デフォルトの名無しさん2010/04/10(土) 21:20:34
なんか質問者よりスキル無さそうなレスだな。中学生か?
0934デフォルトの名無しさん2010/04/10(土) 21:23:55
おまえは素人だけどなw
0935デフォルトの名無しさん2010/04/11(日) 13:22:31
エクセル上でavarege関数で計算
→真下にずらして計算結果セルをコピー
→ずらしてコピーした行数だけ計算元もずらして計算する

これをVBAでやろうと思っても、一番最初の計算結果そのまま全コピーしてしまいます。

おそらくcellsの中身が変数だからだと思うんですが、何か良い方法はありませんか?
今は仕方ないのでfor i 使っていちいち全セル計算させてますが遅いです・・・
0936デフォルトの名無しさん2010/04/11(日) 14:03:01
>>935
セルをコピーする時、代入するんじゃなくてCopyメソッドを使う
0937デフォルトの名無しさん2010/04/11(日) 14:30:02
始めてVBA使うんですが、次のコードで「プロパティーまたはメソッドをサポートしていません」なるエラーで停止します。
文字列なら追加できるみたいなのですが、自分で作ったクラス等はCollectionに格納出来ない仕様なのか、単に文法ミスなのか教えてもらえますでしょうか?

Dim testCollection As Collection
Dim a発注 As C発注
Set testCollection = New Collection
Set a発注 = New C発注
testCollection.Add (a発注) 'ここでエラーが発生する
0938デフォルトの名無しさん2010/04/11(日) 14:52:03
>>937

testCollection.Add Item:=a発注
又は
testCollection.Add a発注
じゃないかな


ちなみに自分は
testCollection.Add Item:=New C発注
って書いてる
0939デフォルトの名無しさん2010/04/11(日) 14:58:57
>>938
ありがとうございます上手くいきました、なかなかステートメントと関数の違いになれられないですOrz
参照と実体で微妙に違う文法にも・・・
久々のBasicで、ああそういえばこんなのがというのがいっぱいです
09409382010/04/11(日) 14:59:49
訂正
testCollection.Add a発注
はダメかも
0941デフォルトの名無しさん2010/04/11(日) 15:00:39
>>940 大丈夫でしたよ
0942デフォルトの名無しさん2010/04/11(日) 15:10:47
()あると渡し方変わるのは知ってたけど、でもなんで?
0943デフォルトの名無しさん2010/04/11(日) 15:56:56
functionになるから
0944デフォルトの名無しさん2010/04/11(日) 16:08:07
正直フルセット C# and VB.NET のVBAが欲しいです、色々中途半端
0945デフォルトの名無しさん2010/04/11(日) 16:12:09
何が中途半端?
0946デフォルトの名無しさん2010/04/11(日) 16:55:00
Function?
1*(1+1)みたいに(a発注)の部分が先に実行され、
a発注がデフォルトプロパティーを持たないからエラーになったってことか、なるほど。
0947デフォルトの名無しさん2010/04/11(日) 17:40:37
>>945
VBにはあるのにVBAにはないメソッドとかイベントとかクラスとかいっぱいあるじゃん
0948デフォルトの名無しさん2010/04/11(日) 19:06:48
VBAは所詮マクロだからねぇ
VBと統合して.NETframeworkで動くようにしてくれれば非常にありがたいんだが
0949デフォルトの名無しさん2010/04/11(日) 20:07:21
一部は使えるだろ
0950デフォルトの名無しさん2010/04/11(日) 20:20:49
一部しか使えないから中途半端だと言ってるゲソ
レス数が950を超えています。1000を超えると書き込みができなくなります。