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


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

Excel VBA 質問スレ Part26



1 名前:デフォルトの名無しさん mailto:sage [2012/08/19(日) 17:01:50.51 ]

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
toro.2ch.net/test/read.cgi/tech/1341722983/


154 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:07:02.26 ]
多量のテーブルデータがあったとして、
ワークシートとデータベースって
どっちを使おうっていう判断基準を教えてください
ファイルサイズを考えて、どちらも外部ファイルにデータを置くとした場合。

155 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:24:44.36 ]
>>154
具体例を挙げてくれれば助言はできるけど
そんなもん一概に言えないよ

156 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:30:58.40 ]
データ数が1万レコード以上ある時はアクセスを使うべき

157 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 00:40:54.73 ]
>>155
1000×3ぐらいの数値テーブルが、数十個あって
ランダムな場所を幾度も読み込んで計算するような感じです
速度が求められます

シートにおさまるんだけど、どちらがいいのかな〜と。

158 名前:157 mailto:sage [2012/09/04(火) 00:48:49.04 ]
ちなみに、今はワークシートのデータをdllに投げて、処理して値を受け取るようにしているんだけど、
配布やら設定やらの問題でvbaで完結させたい。

159 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 01:03:28.50 ]
アクセスじゃなくてエクセルでdbやってみりゃいいじゃん

160 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 01:19:21.98 ]
メモリに乗りきらないとか、ワークシートに収まらないほどのデータがあるならDB
それ以外なら好きにしろ


161 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 04:33:32.77 ]
>>157
その程度のデータ量なら配列に一気に読み込んでから計算するのが一番処理が速い

162 名前:桃白白 [2012/09/04(火) 05:52:03.40 ]
>>153
スリープのあとにDoEventsを呼ぶようにしたら
10000回ループしても問題なかったよ

Call VBA.Interaction.DoEvents

理屈は知らん、寝るのに忙しくて表示を更新できません的なことなんじゃね



163 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 06:51:00.28 ]
何かというと配列云々をいうアホがいるがそれだけじゃまったく不十分
アルゴリズムの方が大事だ

164 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 07:11:04.98 ]
アルゴリズムの方も大事だ、だろ
シートとのやり取りのコストも、これはこれで馬鹿にならないよ。

>>153
x64Win8+Excel2013で動かしてみたけど固まりはしないな。
ただ、ESCキーでの実行中断が何故か効かなくなった。

165 名前:153 mailto:sage [2012/09/04(火) 07:57:06.49 ]
>>162
固まらなくなりました。ありがとうございます
ちょっと理屈調べてみたいと思います
>>164
環境にもよるみたいですね。テストありがとうございました

166 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 09:26:27.40 ]
>>153
余計なお世話かも知れないが、
プログラムが動作するしない以前の問題として
変数の宣言が間違ってる。
dim a,b as integer
だと、aがVariant型、bがInteger型になる。
あと、変数名間違ってるのが数カ所あった。
Option Expricitで変数の宣言を強制する癖をつけた方が良いと思う。

167 名前:166 mailto:sage [2012/09/04(火) 09:31:39.92 ]
綴り間違えた
×Expricit
○Explicit

168 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 18:33:21.31 ]
これは恥ずかしい。

169 名前:151 [2012/09/04(火) 18:52:25.13 ]
>>152
ありがとうございます。その255バイトまでっていうのが
何の仕様なのかが、どうも掴めなくて気持ち悪いんです。

変数の型はバリアントにしているので、変数の型によって255バイト
っていう制限がかかるわけじゃないし
Application.Dialogs(xlDialogSendMail).Show の引数は255バイト
までと決まっている(仕様)、ということなんでしょうか?



170 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 19:26:37.09 ]
>>169
メールのtoフィールドが255バイト以下ってのはRFCで決まってたはず
それ以上送りたい場合はtoフィールド自体の数を増やせばいいんだけど、
受け取った側から見るとあんまり気分の良い物じゃないのでBCCなどを使った方がいい

171 名前:桃白白 [2012/09/04(火) 20:06:56.45 ]
>>170
マジで!? メールアドレスの最大の長さが255文字でTOが複数のアドレスを含むことが
できるとするなら理屈としてはTOは255文字以上を許容しないといけないんじゃね?

>>151
配列でアドレスを指定できるんじゃね?
Application.Dialogs(xlDialogSendMail).Show Array("桃白白さん", "ブルマさん")
みたいにして

172 名前:153 mailto:sage [2012/09/04(火) 20:29:08.45 ]
>>166
まじかよVBA糞だな首吊ってきます



173 名前:デフォルトの名無しさん mailto:sage [2012/09/04(火) 23:30:33.17 ]
>>169
自作鯖ならsendmailmaxなんちゃらみたいな設定がたぶんhtod.confとかにあると
思ったけど
to Cc Bccでの上限数はあまり変わらないんじゃないか

174 名前:デフォルトの名無しさん mailto:sage [2012/09/05(水) 00:43:55.42 ]
>>172
VBAがというか大本のVBがそういう仕様だからなぁ
つか知らなきゃそう書いちゃうよな

175 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 12:02:31.87 ]
質問です。

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 名前:デフォルトの名無しさん [2012/09/07(金) 12:47:57.33 ]
ExcelのVBAについて学ぼうと思っています。
まだまだ初心者なので、VBAについてお詳しい方、
ExcelのVBAでのテーブル作成方法を教えてください。

177 名前:デフォルトの名無しさん [2012/09/07(金) 12:51:57.92 ]
↑入力項目は@入力年月日A転出入りフラグ1、転入2、転出(選択すると自動的にカウントアップ)B氏名C新住所D性別
E年齢F生年月日F職業G男性人口±H女性人口±I全体の人口±といったところです。
このデーターを格納し帳票に飛ばしカウントアップしてデイリー分の男性、女性の転出、転入を出力データとしてまとめ
総人口数を求めるようにしたいのですが。

178 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 13:06:18.19 ]
馬鹿には無理

179 名前:桃白白 [2012/09/07(金) 13:34:55.59 ]
>>175
Excel 2007 で Shapes オブジェクトのインデックスに不正な値 0 を指定してもエラーにならない
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 名前:桃白白 [2012/09/07(金) 13:39:04.73 ]
>>176
データベースがメインになるんなら
Accessでやっちゃった方がよくね?

181 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 13:58:48.61 ]
access高いから避けたい

182 名前:桃白白 [2012/09/07(金) 14:17:45.26 ]
>>181
データベースに何を使うかは決まってんの? MDB?



183 名前:デフォルトの名無しさん mailto:sage [2012/09/07(金) 15:37:49.26 ]
PostgreSQLが良い

184 名前:桃白白 [2012/09/07(金) 19:38:37.15 ]
>>183
ゾウさんのやつな、かっけーよな

185 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 02:27:32.71 ]
教えて下さい。
excel vba でIE object のコントロールで
ajaxを起動できますか?
fireeventでjavascriptはわかったのですが
selectにonclickがなくajaxでload window
しているものがありどう呼び出せばよいか
悩んでます

186 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 04:45:25.16 ]
★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 名前:デフォルトの名無しさん [2012/09/08(土) 08:35:29.78 ]
重ねたバケツが抜けないのですが、何か良い方法はあるでしょうか?

188 名前:デフォルトの名無しさん [2012/09/08(土) 09:29:19.83 ]
外側のバケツのみ熱します

189 名前:187 [2012/09/08(土) 09:30:46.59 ]
どうやって熱しますか?

190 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 09:41:15.34 ]
油を注いで熱します

191 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 09:48:31.79 ]
>>185
的外れかもしれないけどブックマークレットで呼ぶとか?
shokai.org/blog/archives/1234

192 名前:デフォルトの名無しさん mailto:sage [2012/09/08(土) 20:57:56.13 ]
>>177
DAOとかADOとかでExcelをRDBみたいにSQLで扱えるから
そういう感じでやれば良いんでね
やり方はググって好きな方法選んでくれ



193 名前:桃白白 [2012/09/09(日) 01:50:11.99 ]
みんな聞いて。桃白白のExcelの使用期限が終わりそう、繰り返す、桃白白のExcelの使用期限が終わりそう。

194 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 02:17:54.45 ]
Excelって使用期限が設けられているライセンス体系もあったんか
次買うときはケチらずに無期限ライセンスのを買えよ

195 名前:桃白白 [2012/09/09(日) 02:27:17.22 ]
>>194
桃白白貧乏だから買えないの。寄付する? するんだったら桃白白はその好意を決して断らない
ことをここに誓う用意があるけど?

196 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 04:13:41.72 ]
パソコンをリカバリすればまた体験版が使えるようになるよ

197 名前:デフォルトの名無しさん [2012/09/09(日) 07:12:31.16 ]
>>195
互換Office使えばタダだよ
VBA使えないけど

198 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 07:31:11.37 ]
貧乏だけど知識が豊富で頭も良くて有用な回答者にならOfficeくらい寄付してもいいが、
貧乏な上に知識も多少の回答は出来るが並以下レベルで、頭の回転も弱い奴となると、
べつに回答者を続けてくれなくても誰も困らないから、Excelの使用期限と共に消えてくれて
一向に構わないな

199 名前:桃白白 [2012/09/09(日) 10:38:47.13 ]
   ∧∧
   /⌒ヽ)
  i三 ∪
 ○三 |
  (/~∪
  三三
 三三
三三三

200 名前:デフォルトの名無しさん [2012/09/09(日) 15:24:00.49 ]
>>199
俺も貧乏だから寄付しないけどタオパイパイ嫌いじゃないよ
これからは回答せずに
にぎやかしでAA貼ってりゃいいじゃん

201 名前:デフォルトの名無しさん mailto:sage [2012/09/09(日) 15:26:03.47 ]
私の声がデムパになって
波になってあなたへ向かってく
私の歌がデムパになって
波になってあなたへ響いてく
私の愛がデムパになって
波になってあなたへ届いてく
私の電子回路が短絡する前に
Electric LOVE Electric LOVE
(∩ ゚д゚) アーアー
この気持ちあなたに届くかな

202 名前:デフォルトの名無しさん [2012/09/10(月) 11:09:37.38 ]
VBAであるセル範囲をコピペして他のシートに貼り付けたとき
図のオブジェクトがどういうわけかコピペされないんです。
どうすればこの図のオブジェクトも正しくコピペされて他のシートにも表示させるようにできますか?



203 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 11:21:30.08 ]
馬鹿には無理

204 名前:202 [2012/09/10(月) 11:31:04.49 ]
>>203みたいな馬鹿には回答は無理なのは分かりますよ。

205 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 11:37:58.19 ]
ただ図がセル範囲からはみ出してるだけじゃないのか?

206 名前:202 [2012/09/10(月) 11:40:24.57 ]
いえ、しっかりセル範囲内におさまっています。
列は3、行は20くらい、
図はちょうどど真ん中あたりにあり、1つのセルと同じくらいの大きさなのに。

207 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 14:03:16.08 ]
2007以降だっけ、図形や画像のオブジェクト仕様が変わってるから
その影響じゃね確かめてないけど

208 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 14:23:25.83 ]
>>202
コードも貼らずに・・・VBAでコピペといっても丸ごと・値だけ・図だけ・云々
値だけコピぺのコードになっていないか?



209 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:30:15.55 ]
再現できたよ

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 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:36:44.24 ]
きもっ

211 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:39:18.22 ]
こっちのコードなら図形も正しくコピペされたよ

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 名前:デフォルトの名無しさん [2012/09/10(月) 15:43:04.57 ]
Select って恥ずかしいよね



213 名前:デフォルトの名無しさん mailto:sage [2012/09/10(月) 15:50:50.02 ]
なんでVBAのコードにしないんだろう?

214 名前:デフォルトの名無しさん mailto:sage [2012/09/11(火) 11:33:18.80 ]
中二病だから






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

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

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