Excel VBA質問スレ Part13at TECH
Excel VBA質問スレ Part13 - 暇つぶし2ch371:デフォルトの名無しさん
09/10/19 02:03:39
VBA使いの皆様へ

VBAとExcelは余り相性が良くありません。
VBAをExcelの上で使うとVBAもExcelも下手になることが
多いです。Excelを使う場合は、出来る限りVBAを使わず
シートの上の数式だけでなんとか出来ないか先ず考えま
しょう。
Excelで本格的な大量計算を行うのは向いていません。
Excelは概して計算が早く無いからです。
VBAを学びたいというのであればAccessのほうが
がおすすめです。

372:デフォルトの名無しさん
09/10/19 04:51:58
hagedo

373:325
09/10/19 12:55:44
>>343
ネットワークドライブの割り当てもやってみたんですが、「ネットワーク名がみつかりません」になってしまうんです。

>>341
やってみましたが、結果は変わらずでした。ありがとうございます。

>>342
オフコン系SEなのでWEBDAVとは初耳でした、ありがとうございます。色々調べてみます。
ちなみに新しいブラウザにURL入力しファイルを開いてもhttp://~のままでした。

374:デフォルトの名無しさん
09/10/19 13:33:05
>>371
WorksheetFunction使えばいいやん

375:デフォルトの名無しさん
09/10/19 13:47:51
userformを見えなくするのに

unload meと
userform1.hide

が有りますけど(他にもあるのか知りませんが)、この違いって何ですか?

376:デフォルトの名無しさん
09/10/19 14:33:00
>>375
hideは見えなくなるだけでまた復活させることができる。例えばテキストボックスの中身とかそのまま残ってる。
unloadは完全に消去

377:デフォルトの名無しさん
09/10/19 16:21:50
>>375
簡単に言うとUnloadはメモリから削除してしまう。
hideは字の如くメモリに残したまま見えなくするだけ。

378:デフォルトの名無しさん
09/10/19 17:22:44
>>376-377
ありがとです。

後で再利用するなら hide もう要らないなら unload ですね。

379:デフォルトの名無しさん
09/10/19 17:47:45
unload 378

380:デフォルトの名無しさん
09/10/19 18:28:22
>>379

379.visible = false

381:デフォルトの名無しさん
09/10/19 19:12:37
ユーザーフォームを印刷しようと思ってるのですが、ユーザーフォーム自体のサイズが大きいのでA4のサイズに納まらずはみ出てしまいます…

A4サイズに縮小して印刷する方法はないでしょうか?

コードはシンプルに
userform1.printform
だけです。
かなりググッたりしてみましたが、良いホムペもなかったので…

382:デフォルトの名無しさん
09/10/19 19:37:40
>>373
いやだからhttp://でアクセスできるんだけど読み取りになるんだよ。
それはhttpプロトコルの制約だから。
http://を\\サーバIPにして後ろの/を全て\になおしてみて。

383:デフォルトの名無しさん
09/10/19 19:43:01
>>381
縮小印刷はプリンタドライバの仕事。機種依存になるので自力で試行錯誤が必要

384:デフォルトの名無しさん
09/10/19 20:33:33
excel2007

リストボックスに3列データを入れる事が出来るようになったとこなんですけど

(1) これタイトルみたいなのを付ける事は出来ないんですか?

コード  商品名  支店 ←付けたいタイトル
9999 xxxxxxxxx xxxxxxx ←データ

みたいな感じで。

(2)
code=Userform1..ListBox1.Text
で選択したコードを拾う事は出来たんですが、この例で商品名を拾うにはどのようにすれば良いのですか?




385:デフォルトの名無しさん
09/10/19 21:22:18
【1 OSの種類      】 Windows XP SP2
【2 Excelのバージョン】 Excel2000
【3 VBAが使えるか  】 4日目 勉強中
【4 VBAでの回答の可否】 可
まだひよっこちゃんですが皆さんよろしくお願います。

マクロの勉強兼ね、エクセルでTOEICの単語帳を作ろうと思っています。
形としましては、
英単語および日本語訳をシートのA、B列に羅列し、
ユーザーフォームで、
英単語用のテキストBOX1、コマンドボタン1、
日本語用のテキストBOX2、コマンドボタン2
暗記済みのチェックボックスが3つ
という構成で、
コマンドボタン1を押すとランダムで英単語が選択され、テキストボックス1に表示
その状態でコマンドボタン2を押すとその訳がテキストボックス2に表示され、
暗記済みの時はチェックボックスにチェックをつけ、3つたまるとその単語は二度と出てこないようにしようと思います。
また、再度ファイルを開いても単語ごとに同じ状態が保存されているようにしたいと思います。

単語数が600あるという設定で、以下のように作ってみましたが、日本語訳表示の時点で詰まってしまいました。


386:385
09/10/19 21:24:01
Private Sub UserForm_Click()
End Sub

Private Sub UserForm_Initialize()
End Sub

Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 600
intmin = 1
TextBox1.Value = Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)
End Sub

Private Sub CommandButton2_Click()
TextBox2.Value = TextBox1.Value.Offset(0, 1)
End Sub

CommandButton2 の TextBox2.Value = TextBox1.Value.Offset(0, 1)なんかは
明らかにおかしいかと思いますが、テキストボックス1に表示した、英単語をどのように返せばいいのでしょうか。
Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)を再度使うと、新たなランダム値を取得してしまうのですしょうか?
かなり初歩的かもしれませんが、紙にプリントしてさっさと単語覚えた方が早いんじゃないかと、焦ってきましたもんで
でも何とか完成させたいので、どなたか以下のいずれでもいいのでご教授ください。

・ランダム値が同じ順序ではなく、常に変化する方法
・チェックが各英単語ごとに反映させる方法
・そのチェックがファイルを閉じても保存される方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)

よろしくお願いします


387:デフォルトの名無しさん
09/10/19 21:56:18
>>385
・ Cellsを使う時は、シートを指定したほうが良い

・テキストボックス2に日本語訳を返す為に
 英単語を表示する時に使用したセルの行位置を保存しておく
 →モジュールレベル変数を利用する

つー事で下記はいかが?

Private mRow As Integer

Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 9
intmin = 1
mRow = Int((intmax - intmin + 1) * Rnd + intmin)
TextBox1.Value = Worksheets("sheet1").Cells(mRow, 1).Value
End Sub

Private Sub CommandButton2_Click()
TextBox2.Value = Worksheets("sheet1").Cells(mRow, 2).Value
End Sub

388:デフォルトの名無しさん
09/10/19 22:07:56
今まで快適に使えていたエクセルファイルが、
突然アホみたいに重くなって起動が容易じゃない。
色々調べたけどさっぱり解らない…。
誰か助けてください。

・サイズは600KBほど
・隠れてるオブジェクト無し
・使用範囲以外に隠れデータ一切無し
 (書式設定やリンクなど)
・シート30枚ほど
・モジュールの解放もやってみたが改善せず



389:デフォルトの名無しさん
09/10/19 22:13:45
特定ファイルだけ?
ハードディスクが死にかけてるとか

390:デフォルトの名無しさん
09/10/19 22:18:01
ウィルスチェックoffにして開いてみれ

391:デフォルトの名無しさん
09/10/19 22:19:53
他のファイルのシートと連動させてるようなのだと
ファイルの置き場所変わっただけで
リンク先行方不明連発で死亡とかあるから
Excelきらい

392:388
09/10/19 22:54:19
>389
特定ファイルだけです。
会社で作成したデータ集計用のファイルです。
これ1つだけが異常に重くなり、開く時に
CPU100%を食う状況になっています。

>390
ウィルスチェックoffにすることは出来ないです。
会社で常にネットワーク接続されてるもので…。




393:デフォルトの名無しさん
09/10/19 23:22:01
>>388
ここは Excel VBAスレなんでスレ的に考えると

VBAの処理が 異常に時間がかかってるのでは?
原因として
 ・VBAのコードを変更した為に 異常なループが発生した
 ・元々のVBAのコードにバグがあって あるデータの組み合わせで
  異常なループとなった
とか?

だとすれば
とりあえずオープン時実行するイベント処理停めてみたら?
イベントプロシージャの先頭に Exit Sub を入れてみる

394:デフォルトの名無しさん
09/10/19 23:31:32
>>392
ローカルにコピって
スタンドアロンのPCでテスト汁
さらにウィルスチェックoffにして開いてみれ


395:デフォルトの名無しさん
09/10/19 23:46:05
>>392
xlbファイルを削除する。
CドライブをExcel*.xlbで検索してみて。

396:デフォルトの名無しさん
09/10/19 23:58:33
>>391
そんな使い方しないよ。

397:385
09/10/20 00:54:42
387さんありがとうございます。
値を保存するという便利な方法があったんですね。
勉強になります。おかげさまで単語帳っぽくなりました。

残りのチェックボックスにかかわる部分ですが、もう少し努力してみます。

ただ
・チェックを各英単語ごとに反映させる方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
これらがどうにもできそうにないです… すんません

チェックボックスにチェック入れた単語のどこかの列に、何かしら数字など加え
その値を返して、状態を判断することしか思いつかないのですが、
何かもっと良い方法ありますかね?




398:デフォルトの名無しさん
09/10/20 01:21:27
とりあえず出来る方法を思いついたなら、それでやればいい
その方法だとこんな問題がある、とかならそれを質問すればいい
もっと良い方法とか漠然と聞かれると速度房がアップ始めるぞ

399:384
09/10/20 08:16:29
自己解決


(1) これタイトルみたいなのを付ける事は出来ないんですか?
フォームのリストボックスの上方にラベルを配置し、それをタイトルとするように
しました。

(2)code=Userform1..ListBox1.Text で選択したコードを拾う事は出来たんですが、
この例で商品名を拾うにはどのようにすれば良いのですか?

Dim n As Integer

n=UserForm1.Listbox1.ListIndex

xxx = ListBox1.List(n,0)
yyy = ListBox1.List(n,1)
zzz = ListBox1.List(n,2)


以上、スレ汚しでした


400:デフォルトの名無しさん
09/10/20 10:28:27
あらあらこんなに汚しちゃうなんて……イヤラシイ子ね……フフフ

401:デフォルトの名無しさん
09/10/20 12:38:07
ここに速度厨なんている?
俺は速度より美しいか汚いかにこだわるが、たまに速度厨と勘違いされる。
汚いのは遅いって大体決まってるけどな。
そこの君、お前だよw

402:デフォルトの名無しさん
09/10/20 19:25:43
>>385
完成したらサンプル見せてください。お願いします。

403:デフォルトの名無しさん
09/10/20 21:14:22
VBA勉強中の初心者です。
セルA1~A10まで100
A11に1
この状態で1がある行番号を手に入れたいんですが
結果は2です。
どうやったら11を入手出来るんでしょうか?
Dim rng As Range
Set rng = ActiveSheet.Range("A1:A11").Find(1)
A = rng.Address
B = Rows(A)


404:デフォルトの名無しさん
09/10/20 21:21:06
>>401
誰を煽ってるんだよw
唐突過ぎてわろたわ

405:デフォルトの名無しさん
09/10/20 21:49:07
>>403
100 という文字列での 1の部分でヒットしているみたいね
とりあえず下記ではどう?
Set rng = ActiveSheet.Range("A1:A11").Find(1, LookAt:=xlWhole)

406:デフォルトの名無しさん
09/10/20 21:56:20
Find関数はいろいろとバグがある。

407:405
09/10/20 22:08:06
>>406
たしかに今回の場合だと
セルの表示形式を数値にすると ヒットしなくなるね

408:デフォルトの名無しさん
09/10/20 22:09:02
たしかにオートフィルタとかのVBAの使い勝手がいい

409:392
09/10/20 22:43:00
解決しました。
tmpファイルを全て削除してみたところ、
かなり軽減されましたがまだ反応が鈍かったため、
思い切って新規エクセルに全て
コピーしてみました。

結果、快適に動くようになりました。
おまけにサイズも400kbまで小さくなりました。

410:デフォルトの名無しさん
09/10/20 22:57:36
>405
有難うございます。
明日になってしまいますけど、試してみます。
上手くいったら、その時に
LookAt:=xlWhole
の意味を理解したく教えて下さい。

411:デフォルトの名無しさん
09/10/20 23:29:44
特定の文字列にヒットする条件ならワークシート関数が強力だが
勉強しはじめなら、セルを一個一個確認してループさせる手法からハイルべき
特にエクセルVBAなら

412:405
09/10/20 23:37:10
>>410 & 411

>>411 の意見には賛成です
今回の場合は特に

>>410 の質問の回答ですが

Findは Excel本体の検索とほぼ同じものです
マクロの記録をいろいろしてみると分かると思いますが
"完全に同一のセルだけを検索する"です

それと>>407 へ書いたけど
セルの表示形式が数値だと失敗するかもです
一応 標準形式だとうまく検索できたのだけど

413:デフォルトの名無しさん
09/10/21 07:11:50
Findメソッドは基本的に文字列を検索するもんだ。
まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。

414:デフォルトの名無しさん
09/10/21 13:53:11
ちょっと暇なときにVBA勉強しようと思うんですが、勉強するなら2003と2007どっちがいいですか?

415:325
09/10/21 15:09:21
>>382
ありがとうございます。勘違いしてました・・・・
しかし、\\サーバIPにしてもだめでした。

Sub COPY_SAMPLE()
Dim objShell
Dim objFolder

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("\\サーバ名\フォルダ名1\フォルダ名2")

If (Not objFolder Is Nothing) Then
objFolder.CopyHere "c:\TEST.txt"
Else
MsgBox "Nothing"
End If

Set objFolder = Nothing
Set objShell = Nothing

End Sub

Nothingのメッセージボックスが出ます・・・

416:デフォルトの名無しさん
09/10/21 15:37:47
>>414
自分が持ってんのがどっちなのかによるでしょ。
今からなら2007の方が良いのかなとは思うけど。


417:デフォルトの名無しさん
09/10/21 16:11:22
>>416
ありがとうございます。持ってるのが2000と2007だったので2007勉強することにしました

418:デフォルトの名無しさん
09/10/21 20:02:12
2000と2007しかもってないのに2003を選択肢にするとは・・・できる

419:デフォルトの名無しさん
09/10/21 20:03:45
>>415
URLリンク(q.hatena.ne.jp)
これでやってみな。
ヒントはきちんといかそうぜ。

420:410
09/10/21 21:43:51
>411-412
上手くいきました。有難うございます。

>413
そのまさかなんですが・・・
なんとか上手くいきました。独学&ヘルプ@2007ではなかなか上達しないですね。今度、本屋行ってきます!

421:デフォルトの名無しさん
09/10/21 22:04:58
いやバグはあるよ。

422:デフォルトの名無しさん
09/10/21 22:09:25
【合法】みんなズッキーニでヘヴン状態しようぜ!!
スレリンク(yasai板)

423:デフォルトの名無しさん
09/10/21 22:51:50
初心者です。質問させてください。
XP、office2000において、onactionで呼び出すsub hogeにsingleの引数を複数渡したいのですが、どのようにすればよいか教えてください。

.onaction("'hoge, arg1,arg2'")

とかだとうまくいきませんでした。

424:デフォルトの名無しさん
09/10/21 23:41:28
select case の使い方についてですが

例えば、A4の値及びB4の値によって条件を分岐させたい時に (A4 1または2 B4 同じく 1または2)
Select Ccase Cells(4,1) Cells(4,2)
case 1 1
case 1 2

end select

みたいな使い方出来ないんですかね?Excel2007では

select case cells(4,1) cells(4,2) でエンター押した瞬間に
エラーになっちまいましたが。


425:デフォルトの名無しさん
09/10/21 23:52:34
二十判定は出来ない
変数とかに格納したり論理結合したり
ただ1か2のどちらかなら、文字列結合すりゃいい

426:デフォルトの名無しさん
09/10/21 23:58:26
>>425
了解しました

427:デフォルトの名無しさん
09/10/22 09:32:17
>>423
.OnAction = ”'hoge””arg1””,””arg2””'”

428:デフォルトの名無しさん
09/10/22 11:55:51
java経験しかないまったくの初心者ですが、質問させてください

列AQの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列AUのn1のセルに代入
これをAQの行全てで実行したいのです

Cにおいてhoge1が重複することはありません

どうかよろしくお願いいたします

429:デフォルトの名無しさん
09/10/22 12:04:24
vlookup

430:デフォルトの名無しさん
09/10/22 12:21:27
何行あるかしらんが、列全部にvlookupに限らず参照判定関数入れるのは

そーゆーときは配列に流して連想しる

431:デフォルトの名無しさん
09/10/22 13:47:33
Ver.書くのを忘れてました!ごめんなさい

XPでExcel2003です

列Dの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列Hのn1のセルに代入
これをDの行全てで実行したい、に変更させてください

VBAとExcelマクロの知識が0なんです…
vlookupという関数を使えばいいのですか?
Cは2988行、Dは1284行です

sub test()
dim name as string

for i = 1 to 1284
name = cells(i, 4)
if (vlookup(D$i, C1:C2988, 2, false)) = name then
copy()
pastespecial()

endsub

こんな方向性で大丈夫ですか?

432:325
09/10/22 14:38:41
>>419
そのURLはググってる最中に何度か訪れたんですけど、
ちょっと私には扱えそうもなかったんでスルーしてたんですけど、
頑張って調べながらやってみたら2~3度エラーが出ましたが、
希望通りアップロード出来ました!誠にありがとうございました。
一年分の便秘が治ったようなすがすがしい気分ですw

433:デフォルトの名無しさん
09/10/22 15:16:28
>>431
no

434:325
09/10/22 15:22:42
>>419
すいません、これってLZHファイルとかは扱えないんでしょうか?
TXTやSLK形式は成功したんですけど、LZH形式はエラーになったんです・・・

435:434(325)
09/10/22 15:26:16
自己解決しました。
LZH形式もいけました。ファイル名が不味かったようです。

436:434(325)
09/10/22 15:28:23
連投すみません。
LZH形式、エラーこそ出ませんでしたが、解凍すると文字化けしてまいした。

437:434(325)
09/10/22 15:46:49
再度自己解決しました。.typeと.charaset外したら正常に解凍出来ました。
スレ汚しすみませんでした。逝ってきます。

438:デフォルトの名無しさん
09/10/23 00:08:18
>>431
言いたい事は分かるんだけどさ。
列Dだの列Hだの、n1だn2だって、そんなのどうでもいいよ。
それで作りたいんだろうけど、読んでて辛いです。
Aから探してBにコピーとかでいいじゃん。組み合わせるだけでしょ。

for i = 1 to 1284
name = cells(i,4).value
set rng = columns(3).find(name)
if not rng is nothing then
rng.offset(0,1).value = rng.value
end if
next

みたいな考え方でやるよ。俺なら。
今ブラウザで書いたんで、動作保障も無し。


439:434(325)
09/10/23 09:54:04
>>419さんの方法でアップロード解決したんですが、半角カナ等のファイル名をうpすると、
実行時エラーになります。回避する方法ありますでしょうか?

D&Dでうpすると正常に出来るんですが・・・・

440:431
09/10/23 11:17:12
>>438
わーい!教えていただいたものを道標に調べつつやってみたらできました!
一応完成版を張っておきます

Sub macro()
   Dim code As String
   Dim rng As Range
   Dim name As String

   For i = 2 To 1284
     code = Cells(i, 4).Value
     Set rng = Columns(3).Find(code)
     If Not rng Is Nothing Then
       name = rng.Offset(0, -1).Value
       Cells(i, 9).Value = name
     End If
   Next
End Sub

ありがとうございました!

441:デフォルトの名無しさん
09/10/23 12:20:06
>>439
エンコードでぐぐりな。

442:デフォルトの名無しさん
09/10/23 12:29:34
>>440
そんなんで完成?
Findメソッドの引数が1個だけって大丈夫カヨ
WhatとLookInとLookAtの最低三つは必要じゃないの?

443:デフォルトの名無しさん
09/10/23 13:52:52
>>442
一応ちゃんと動作しましたよ!
今回一回だけ動けばいいマクロなので、結果に間違いがなければOKです!

444:デフォルトの名無しさん
09/10/23 14:17:40
>>443
そりゃたまたまでんがな。
何もいじくってない状態じゃ部分一致だが、それでいいの?

445:デフォルトの名無しさん
09/10/23 14:28:40
本人がOKってんだからいいんじゃね?

446:デフォルトの名無しさん
09/10/23 14:38:09
>>444
う、もしかして上手くいったと勘違いしてるだけなんですかね…
codeはxx01みたいな形で、nameは文字列(重複部分多々あり)なんですが

ちゃんと調べてみます!

447:お願いします><
09/10/24 01:26:35
VBA初心者です。
学校の宿題で
「y=sinXとY=Xの2本の直線で囲まれた面積をVBA関数を用いて求めなさい。」
という問題がでました><
ですが、今日初めてVBAという言葉を聞いたぐらいですので、まったく分かりません( ;∀;)

どなたか記入するコードを教えて頂けないでしょうか?

448:デフォルトの名無しさん
09/10/24 01:45:00
学校の宿題は自分でやらなきゃダメ><
何の前提もなしにそんな宿題が出るはずないから、わからないのは貴方がサボっていたってことでしょ

449:デフォルトの名無しさん
09/10/24 02:20:06
宿題スレ池

450:デフォルトの名無しさん
09/10/24 02:45:13
>>447
これは酷いwww
これが社会に出て行くと思うと末恐ろしいな

451:デフォルトの名無しさん
09/10/24 10:22:29
sinXって直線なのかね

452:デフォルトの名無しさん
09/10/24 10:57:44
>>424
遅レスですが、こんなアイディアも。

Select Case Cells(4,1) & Cells(4,2)
case "11"
case "12"



453:452
09/10/24 10:59:38
>>425 見てなかった… すまん

454:デフォルトの名無しさん
09/10/24 11:43:07
セル参照の計算式

=G5*K3+M1

セル参照+数字の計算式

=F6*G6*3.14

数字のみの計算式

=15*21*45

この数式を区別して色分けする事は可能ですか?
せめて上2つと下1つだけでも区別できればいいんですが

455:デフォルトの名無しさん
09/10/24 11:47:42
>>451
正弦波だから、Y=1 から Y--1 までを往復する曲線かな。
Y=Xの直線とは1点交差するけど、2点とは交差しなんじゃないか?
よくわかんないけどw

456:デフォルトの名無しさん
09/10/24 12:13:36
だいたい2本の直線で囲まれる面積ってなによ
問題の意味すらわかんないならVBA以前の問題

457:デフォルトの名無しさん
09/10/24 12:25:46
非ユークリッド幾何だと日常的

458:デフォルトの名無しさん
09/10/24 12:31:59
大圏航路かよ 何年生の課題だ

459:デフォルトの名無しさん
09/10/24 13:43:37
>>454
手元にPCがないから確認できないけど、今ぱっと思いついた案が1つある。
セルに入力されている数式を取得し、文字列操作関数を使用し演算子の部分で区切る。
区切られた文字列を確認して全てにアルファベットが含まれていれば、セル参照あり、全く含まれていなければセル参照なし。
その他は混合。
どうでしょう?
文系のおいらの考えなので、バカかと思う方はたくさんいると思うけど。

460:デフォルトの名無しさん
09/10/24 13:46:03
>>459だけど一部訂正。
「セル参照あり」→「セル参照のみ」だったよ。

461:デフォルトの名無しさん
09/10/24 15:08:03
問題文を写し間違えただけだろ
Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
片方だけ積分して倍すればいい

462:デフォルトの名無しさん
09/10/24 19:24:38
>>459
0.100000000E+00

463:デフォルトの名無しさん
09/10/24 19:26:00
>Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ

kwsk

464:デフォルトの名無しさん
09/10/24 20:36:00
>>454
セル参照があるかないかだけですが
一つの案として下記なんかはどうでしょうか?

一部の関数を使用していると判定ミスしちゃいますが(DAYS360 とか)

With ActiveSheet.Cells(i, j)
  If (.Formula Like "=*[A-Z][1-9]*") Or (.Formula Like "=*[A-Z]$[1-9]*") Then
       'セル参照を含む数式
       .Interior.ColorIndex = 34
     Else
        'セル参照を含まない数式 又は 定数
        .Interior.ColorIndex = 40
  End If
End With

465:デフォルトの名無しさん
09/10/24 21:22:20
>>462
最初に「=」が付いてるか確認すれば問題ないと思う。

466:デフォルトの名無しさん
09/10/24 22:22:36
0.100000000E+00 +0.100000000E+00

467:デフォルトの名無しさん
09/10/24 22:27:46
絶対に関数は使われていないのだろうか?

468:デフォルトの名無しさん
09/10/24 22:36:56
"=*[A-Z][1-9]*"や "=*[A-Z]$[1-9]*"って何を表してるんですか?

469:デフォルトの名無しさん
09/10/24 22:42:26
性器

470:デフォルトの名無しさん
09/10/24 22:44:17
>>467
そういう話になってくると正規表現?

471:デフォルトの名無しさん
09/10/24 23:17:41
正規表現だと、
*[A-Z]$[1-9]*
の、文末一致or後方参照の $ が説明付かない。

472:デフォルトの名無しさん
09/10/25 00:45:26
userformのtext1に入力された値を使うとき、
userform.text1と書くと思いますが、
text1、text2と順番に参照していきたい時、イメージとしては"text"&i のように変数で指定したいんですがエラーになってしまいます。
何かいい方法はないでしょうか?

473:デフォルトの名無しさん
09/10/25 01:25:10
excel2003でOSはXPです。
ダブルクオーテーションマークが検索したい文章内にある場合どうすればいいのでしょうか。

具体的には
<IMG class="reslevel rf1 level2" alt="きこり レベル 2" src="img/x.gif">
というouterHTMLの文字列に一致したらdo while構文を抜け出すという形にしたいのです。

Do until objIE.document.all.outerHTML = "<IMG class="reslevel rf1 level2" alt="きこり レベル 2" src="img/x.gif">"
という形でダブルクオテーションで括ったのですが「コンパイルエラー」となってしまいます。
どうすれば回避できるか教えていただけないでしょうか。

474:デフォルトの名無しさん
09/10/25 01:25:54
>>472
配列変数を使う(text1とtext2を配列変数に突っ込んで使う)

475:464
09/10/25 01:41:33
>>471

>>464を書いたのは自分だけど
正規表現だと、 $は特殊な意味をもつの?
Like 演算子では特殊な意味をもつようにはHELPに
書かれていなかったんで

.Formula Like "=*[A-Z]$[1-9]* は
=$A$1 とか =A$1 という形式でのセル参照も判定させたいので
付けたんです

もしかして
.Formula Like "=*[A-Z][$][1-9]*"
って書いた方が正解なのかな?

476:デフォルトの名無しさん
09/10/25 02:00:43
>>474
ありがとう

477:デフォルトの名無しさん
09/10/25 02:59:44
>>475
URLリンク(msdn.microsoft.com)
少しは調べろよカス

478:デフォルトの名無しさん
09/10/25 08:59:51
>>475
だから、正規表現じゃないって言ってるのだよ。

=$A$1 を判定させるマッチパターンは、
pattern = "=\$[A-Z]\$[0-9]"

479:デフォルトの名無しさん
09/10/25 15:58:07
色々教えてもらいここに辿り着きました

1つのフォルダーにあるいくつかのcsvファイルの全てのA列からC列のデータを削除したいのです

そういうvba作ってもらえませんか?
どうかお願いします

480:デフォルトの名無しさん
09/10/25 16:05:55
>>479
>>2の★5を100万回読むんだ

481:デフォルトの名無しさん
09/10/25 16:06:04
了解
待ってな

482:デフォルトの名無しさん
09/10/25 17:02:08
>>479

いくらくれる?

483:デフォルトの名無しさん
09/10/25 22:05:39
>>482
お金は…ないんです(T_T)

484:デフォルトの名無しさん
09/10/25 23:30:41
ユーザーフォームでつくったコンボボックス等をダブルクリックして編集画面を開きます。
ここに標準モジュールで作ったプロシージャをコールしても反映してくれません。
なぜでしょう?

485:デフォルトの名無しさん
09/10/25 23:38:10
・何がしたいのか
・現状どうなっているのか
・それに対する自分の意見
・自分の環境は何なのか(CPU,OS,Office)
・サンプルをアップローダーに。

このくらいは質問するなら情報として欲しいわ。

486:484
09/10/25 23:48:06
なんか勘違いしてたっぽい。
コンボボックスにあらかじめ入れておく項目は標準モジュールからは呼び出せないか。

487:デフォルトの名無しさん
09/10/25 23:54:43
最後疑問系なの
質問?
コンボボックス
リストボックスのリストは標準モジュールで指定出来るでしょ
値を入れておきたいならValueに入れればいいでしょ

488:デフォルトの名無しさん
09/10/26 09:00:41
マクロ記録
エクセルでCSV開く
該当行削除
保存
記録停止


↑で出てた正規表現ってよくわかんないんだが何が出来るの

489:デフォルトの名無しさん
09/10/26 09:57:05
日本語でOK

490:デフォルトの名無しさん
09/10/26 17:17:01
Excel2007 statusbarに関する質問です

Dim oldStatusBar

With Application
.ScreenUpdating = False
oldStatusBar = .DisplayStatusBar
End With

~処理~

With Application
.ScreenUpdating = True
.DisplayStatusBar = oldStatusBar
End With

として処理中、statsubarに "現在 " & code & " を処理中"としてcodeを
表示させているのですが、終了後に
"現在 0 を処理中" となります。
これを処理終了後には何も表示させなくしたいのですが、どうすれば
良いのでしょうか。
.DisplayStatusBar = ""とすると、
実行時エラー 13
型が一致しません
となります。



491:デフォルトの名無しさん
09/10/26 20:36:59
>>1の★4に該当しますが、他にいいスレがあったら誘導してください。

Long型の数値からリトルエンディアンByte(4)型に分割したいのですが、どのようにしたらよいでしょうか。
VBだとLong型が8バイトと聞いたので、こちらに質問しました。

よろしくお願いします。

492:デフォルトの名無しさん
09/10/26 22:09:15
1回だけランチしましたが、それっきりで不発です。
どこが変なんでしょ?

CODE

var path='C:/Program Files/Microsoft Office/Office/excel.exe';
var args='';

this.setAttribute('oncommand','this.startProcess("'+path+'","'+args+'")');

this.startProcess=function(path,args){
var file = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);
file.initWithPath(path.replace(/\//g,'\\\\'));
process.init(file);
process.run(false,[args],1);
}


493:デフォルトの名無しさん
09/10/26 23:13:30
>490

2007は知らんけど2003ならば
Application.StatusBar = False

494:デフォルトの名無しさん
09/10/27 00:26:15
>>491
VBAのLongは4バイトです
8ビットずつマスクとシフトしながら分割してください

495:デフォルトの名無しさん
09/10/27 00:27:36
>>492
VBSはスレチ

496:491
09/10/27 01:21:41
>>494
ありがとうございます。
ただ、そのままするとマイナスの値のときにおかしくなってしまいます。
もうすこし詳しく教えていただけないでしょうか。


497:デフォルトの名無しさん
09/10/27 01:34:34
>>496
MSBだけ別の変数にとっとけばいい

498:デフォルトの名無しさん
09/10/27 01:41:11
492はどうみてもJavaSな件

499:491
09/10/27 16:25:08
>>496
ありがとうござました。
マイナス関係なくできました。
難しく考えすぎてたみたいです。


500:デフォルトの名無しさん
09/10/27 19:39:03
Sub Main()
Dim strPath As String
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim col As New Collection
strPath = Excel.Application.GetOpenfilename
If strPath = "False" then
Exit Sub
End If
Set wkb =Excel.Workbooks.Open(strPath)
Set wks = wkb.Sheets("Sheet1")
Set rng = wks.Range("A1")
call col.Add(rng)
If Not(wkb Is Nothing) Then
Call wkb.close: Set wkb = Nothing
End If
If col Is Nothing Then
Set rng = col.Item(col.count)
Debug.Print rng.Value
End If
End Sub
'colって、Nothingじゃないの?
'Is Nothingの対象はRange型のcolでは無くて、col自体を対象としてんのかな。

501:デフォルトの名無しさん
09/10/27 20:01:28
Dim col As New Collection

502:デフォルトの名無しさん
09/10/27 22:27:30
XP で2003使ってます。

2003及び2000で動いてくれれば・・

アクセス側から、あるワークシートにおいて、
Set myWKS = myWKB.Worksheets("test")
With myWKS
t = DCount("*", "T1")
.Range("A10").CopyFromRecordset myRS
.Range("A10:D" & t + 9).Select
.Application.ActiveCell.Sort Key1:=Columns("C"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns, SortMethod:=xlStroke
    .SaveAs "C:\Documents and Settings\Owner\デスクトップ\sample\テスト作成.xls"
    .End With

という処理を行っています。
アクセスを起動後1回目は、ソートが正常に動きますが、2度目以降はうまくソートしてくれません。

次にこのメソッドを使用するときに、引数を指定しなかった場合は、保存されていた値が使用されます。
と、ヘルプにもあるように、ここにひっかかっているのだと考えていますが、
どうにも原因を突き止められません。
どうぞよろしくおねがいします。

503:デフォルトの名無しさん
09/10/27 23:15:04
解決しました。
理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても
エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。

コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、
正常に2度目以降も動くようになりました。

ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば
是非アドバイスおねがいいたします。

504:デフォルトの名無しさん
09/10/27 23:45:25
残ってるのはDBSオブジェクトじゃね
エラー出たときとか終わるときにちゃんと閉じてる?

505:デフォルトの名無しさん
09/10/28 00:36:54
そこでした。
オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、
いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw

コード多すぎて無理臭いので、クエリのほうから指定することにしました。
以降はいい加減に組まないように注意せねばでした。

ありがとうございました

506:デフォルトの名無しさん
09/10/28 10:55:56
エクセルのマクロの問題に対する質問はここでいいですか??

507:デフォルトの名無しさん
09/10/28 11:13:24
OK
バージョン書いてね

508:デフォルトの名無しさん
09/10/28 13:01:21
ここは宿題かたずけますスレって考えてもいいんですか

509:デフォルトの名無しさん
09/10/28 13:19:44
>>508
質問の内容とタイミングによる
時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし
VBA厨が喜んでプログラムを作ってくれることもある

510:デフォルトの名無しさん
09/10/28 13:55:04
とりあえず書いてみます
Excel2003

めっちゃ初歩的です…
Do~LoopかForーNextを使わなければならないみたいです。
1~10までの整数で
偶数の和をD1
奇数の和をE1
に表示せよ です。

511:デフォルトの名無しさん
09/10/28 14:02:20
ExcelはスプレッドシートソフトでVBAの練習台じゃ
ありません。
VBAの練習をしたいのなら、Accessでやれっつーの
(AccessではExcelでやれっていわれるかも)
てなわけで、Active BASICがVBAと文法互換だったら
いいのになとおねだりしよう

【サーバー各所】ActiveBasicその11【冬眠中】
スレリンク(tech板)

512:デフォルトの名無しさん
09/10/28 15:07:11
>>511
あほか。Access持ってる奴なんてごく少数だろうが。

513:デフォルトの名無しさん
09/10/28 15:22:58
ACCは初めにオブジェクトアクセスを経由する必要があるから、VBAの初学には向かないよ、と思ってる
エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある
マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位

逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども

514:デフォルトの名無しさん
09/10/28 16:37:27
>>513
VBA扱う場合はやっぱフォームから入るべきだろ。
テキストボックスで入出力でいいじゃん
Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で
VBAの基本とExcelの基本が十分出来上がって独立
共存できるようになってからじゃないと両方駄目になる悪寒
Accessの場合はVBAが出来てからテーブルやらクエリ
やら覚えていく方法がとれる。

515:デフォルトの名無しさん
09/10/28 17:06:49
別のスレでやれ

516:デフォルトの名無しさん
09/10/28 18:30:39
VBAを使用してアルバイトの出勤簿を作成しています。
例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで
自動で表示する場合はどのようにすればよいでしょうか?

517:デフォルトの名無しさん
09/10/28 20:57:08
フリガナにはそれ用のワークシート関数を使う

518:デフォルトの名無しさん
09/10/28 21:23:03
PHONETIC関数でしょうか?
フリガナを表示しないで、氏名(漢字)が表示されてしまいます。

519:デフォルトの名無しさん
09/10/28 21:39:35
大した人数でないなら
名前と読み方リスト作ろうぜ

520:デフォルトの名無しさん
09/10/28 21:44:07
読み方リストを作り、セル参照を使うということですか?

521:デフォルトの名無しさん
09/10/28 21:51:46
でもなんでも
どう料理するかは考えてないけど
テキストボックスに名前入れると読み仮名ラベルに表示するとかかな

522:デフォルトの名無しさん
09/10/28 21:58:13
>>510
宿題なのかな?答え書いたら勉強にならないから、ヒント書いておくね。

for i = 1 to 10 next

if i and 1 = true then 奇数
if i and 1 = false then 偶数

cells(4,1).value = cells(4,1).value + i

がんばって。

523:デフォルトの名無しさん
09/10/28 22:07:25
ワークシート関数を使うことに決めました。


524:デフォルトの名無しさん
09/10/28 22:08:51
Mod 演算子を使わないのは速度厨なせいでつか?

525:517
09/10/28 22:16:47
URLリンク(detail.chiebukuro.yahoo.co.jp)

なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね

526:デフォルトの名無しさん
09/10/28 22:40:03
ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる

527:デフォルトの名無しさん
09/10/28 22:49:49
変更して保存
  ↓
Excelを終了
とするにはどういうふうに構文をかけばよいでしょうか?

528:デフォルトの名無しさん
09/10/28 22:59:33
>>527
Application.Quit

529:デフォルトの名無しさん
09/10/28 23:49:49
そういえばかなり前に1からnまでの和をループを回して求めよってのに
For i = 1 To n
Next
和 = (1 + n) * n / 2
みたいなのがあったな。

530:デフォルトの名無しさん
09/10/28 23:53:53
>>522
ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。

531:デフォルトの名無しさん
09/10/29 00:19:50
奇数 = 0
偶数 = 0
For i = 1 To 10 Step 2
  奇数 = 奇数 + i
  偶数 = 偶数 + (i + 1)
Next
Debug.Print 奇数, 偶数

532:デフォルトの名無しさん
09/10/29 00:26:27
>>530
>ビット演算なんて分るやつあまりいないんだから

え!そうなの?


533:デフォルトの名無しさん
09/10/29 00:48:08
>>510
教えてくれとは書いていなかったけど、よかったら参考にしてください。

Sub PlzDoHomeworkByYourself()

Range("D1").Value = 0
Range("E1").Value = 0

' The following was written by someone on the net.

For i = 1 To 10
If (i Mod 2) = 1 Then '2で割り切れない場合(奇数)
Range("E1").Value = Range("E1").Value + i
Else '2で割り切れる場合(偶数)
Range("D1").Value = Range("D1").Value + i
End If
Next

' If you're a teacher, you ought to punish your student who didn't do homework himself.

End Sub

534:デフォルトの名無しさん
09/10/29 01:18:45
>>533

ありがとうございます!!また頼むかもしれませんがよろしくお願いします。

535:デフォルトの名無しさん
09/10/29 01:45:25
Sub Main()
Dim rng As Excel.Range
Dim i As Integer
Set rng = Excel.ThisWorkbook.Sheets("Sheet1").Range("D1")
With rng
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
For i = 1 To 10
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
Next i
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
i = 1
Do While i < 11
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
i = i + 1
Loop
End With
End Sub


536:デフォルトの名無しさん
09/10/29 02:03:47
>>510

For i = 1 To 10
  Cells(1, 4 + (i And 1)) = Cells(1, 4 + (i And 1)) + i
Next

537:デフォルトの名無しさん
09/10/29 09:15:12
>>532
officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品


538:デフォルトの名無しさん
09/10/29 09:24:31
>>529
なにそれ面白い


ビット演算とか知識はかろうじてあるけどナニソレ

539:デフォルトの名無しさん
09/10/29 12:14:21
俺ならこうやって高速化するぜ

For i = 1 To n Step n
Next
和 = (1 + n) * n / 2

540:デフォルトの名無しさん
09/10/29 12:21:10
すまんが教えてください

vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。

ExecWBとSendKeysでやってみたが上手く行かなかった。
やり方に問題があるのか、違う方法があるのか?

教えてください。

541:デフォルトの名無しさん
09/10/29 12:21:25
おれならこうだな

for i = n to n
next

542:デフォルトの名無しさん
09/10/29 12:46:51
速さならこっちかな?

For i = 1 To n
Exit for
Next
和 = (1 + n) * n / 2

543:デフォルトの名無しさん
09/10/29 13:08:40
さすがにこれは反則だろうな

Goto aaa
For i = 1 To n
Next
:aaa
和 = (1 + n) * n / 2

544:デフォルトの名無しさん
09/10/29 13:21:48
和 = (1+n)*n/2
Debug.Print 和

ループ

こうか!

545:デフォルトの名無しさん
09/10/31 10:22:29
質問させてください。(Excel2003 XP)

ExcelでRS-232-C通信を行おうとしております。
大昔に一度、何かを見ながら自作したマクロを参考にやっています。
当時はMSCommを使用しておりましたので、同様にツールボックスから
MSCommをフォームに貼り付けると、
「サブジェクトは指定された操作に対して信頼されていません。」
と表示され、貼り付けることができません。

Webで調べると、どうやら
ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
を実行したことで使用出来なくなってしまったようです。
対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
削除して回るのも非現実的です。

MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
更新プログラムの削除や新たに何かをインストールしなくても使用できる
方法はないでしょうか?
また他にWinAPIで行う方法もありましたがこちらで行う方法が主流?
なのでしょうか?

よろしくお願いします。

546:デフォルトの名無しさん
09/10/31 13:10:43

>ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
>を実行したことで使用出来なくなってしまったようです。
>対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
>削除して回るのも非現実的です。

>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?



自分で何言ってるか分かってる?

547:545
09/10/31 15:21:48
>546

失礼しました。

>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?

MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン
トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど
をインストールしなくても使用できる方法はないでしょうか?
(MS系の更新インストールや代替コントロールのインストールは可)

WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け
たいのですが、今から作るのであればコントロールではなくWinAPIで行う
べきでしょうか?

よろしくお願いします。


548:デフォルトの名無しさん
09/10/31 19:18:22
MSCommを使いたいなら対策は「ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)」を削除


549:デフォルトの名無しさん
09/10/31 19:33:45
セキュリティパックとは、古く多少リスキーでありながらも
公開されていたDLLとかの機能を殺してしまってモノシリッ
ク化しつつある疑似カーネル群のコードを間接的に使うように
することだったんでつね

550:デフォルトの名無しさん
09/11/02 11:29:29
>>545
URLリンク(ziddy.japan.zdnet.com)
これはどう?

551:545
09/11/02 22:21:47
>550

ありがとうございます。
投稿前にこれも試したのですがVB6が入ってないから
ダメと言われました。

WinAPIに挑戦してみます。
ありがとうございました。

552:デフォルトの名無しさん
09/11/03 05:55:57
>>551
EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。

553:デフォルトの名無しさん
09/11/03 13:19:49
>>551
VB6のSP6のruntimeのみってvectorとかに無い?
#自分はsp5の使ってるけど

554:デフォルトの名無しさん
09/11/03 13:36:56
Vector のダウンロード数が一番になってるランタイムって、
コメント読んだらシステム破壊の事が書かれてて怖いわw

俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。

URLリンク(www.hmpage.jp)

セットアップがVB6のプロジェクトのタイプなので、インストール後に
アンインストールして、ライブラリ類は全残しでいけた。

555:デフォルトの名無しさん
09/11/03 14:58:37
Frameworkさえいれておけば.NETの機能って使えるんだな
最近知ったけどStringBuilderとか使えて便利だ

556:デフォルトの名無しさん
09/11/03 15:35:51
>>555
知らんかった・・・・・
#まともなhash使えるとかなりうれしいなぁ

557:デフォルトの名無しさん
09/11/04 21:19:25
AOD.NET って使える?

558:557
09/11/04 21:20:45
訂正
ADO.NET

559:デフォルトの名無しさん
09/11/04 22:32:00
VBAで使えるのはADOであってADO.NETは使えないんじゃなかった?
俺は2007だけどADOでアクセス(という言い方でいいか)してる。


560:デフォルトの名無しさん
09/11/04 23:40:03
CreateObjectでインスタンスを無理やり生成してやれば使えるんじゃね
まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい

561:デフォルトの名無しさん
09/11/07 09:08:12
以前お世話になりました270です。
ネット検索で検索ヒット件数を取得し
A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、
グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、
送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに
つなげるかもわからない)みたいなのですが、
この送信ワード URLリンク(yahoo.co.jp) %5%6
とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう
か?

562:デフォルトの名無しさん
09/11/07 09:13:04
アタックはやめろ

563:デフォルトの名無しさん
09/11/07 09:39:23
yahooのデベロッパーのサイトでは一日5万まで使って開発してくれ
というのです。別段500でもいいから自動化させたいのですが・・・
そこには例文がなくて・・・どこかにフォーラムでもないでしょうか?

URLリンク(developer.yahoo.co.jp)

564:デフォルトの名無しさん
09/11/07 11:05:12
Yahoo! JAPAN Web APIはあきらかにスレ違い

565:デフォルトの名無しさん
09/11/07 17:28:03
excel vbaで他のブックのセルデータを参照するにはどうすればよいの?

566:デフォルトの名無しさん
09/11/07 17:30:07
上、ちなみにexcel2003です。
Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate
これをやっても、インデックスが有効範囲にありませんが出ます。
どなたかお願いします。
     

567:デフォルトの名無しさん
09/11/07 18:13:11
フォームのTextboxにドラック&ドロップで任意の列データを持ってくることはできますか?
やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。



568:デフォルトの名無しさん
09/11/07 20:06:01
>565-567

つマクロの記録

569:デフォルトの名無しさん
09/11/08 00:28:16
B列に1万近くの数値があり、そこから特定の範囲(例えば100~101など)に適した数値を
指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、
どのようにしたらよいでしょうか?

Excel2003です

570:デフォルトの名無しさん
09/11/08 00:32:48
VBAでRSSの読み込みって出来ますか?

571:デフォルトの名無しさん
09/11/08 09:22:15
>>570
こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば
よっぽど早く結果に到達できますよ。その上でわからないことを
質問したほうが効率的では?

572:デフォルトの名無しさん
09/11/08 09:57:39
>>569
import sys, os
import win32com.client

def main(from_s, from_e, to, rng):
if from_s[1] != from_e[1]:
print 'error'
return
if rng[0] > rng[1]:
print 'error'
return
pwd = os.path.abspath(os.curdir)
xls = win32com.client.Dispatch('Excel.Application')
try:
wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
sheet = wb.Sheets(1)
c = 0
for row in range(65535):
if row >= from_s[0] and row <= from_e[0]:
v = float(str(sheet.cells(row, from_s[1])))
if v >= rng[0] and v <= rng[1]:
sheet.cells(to[0] + c, to[1]).value = v
c += 1
wb.SaveAs(os.path.join(pwd, 'testout.xls'))
wb.Close()
except:
print sys.exc_info()
finally:
xls.Quit()

if __name__ == '__main__':
main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-

573:デフォルトの名無しさん
09/11/08 10:00:45
インデント消えてた orz
import sys, os
import win32com.client

def main(from_s, from_e, to, rng):
  if from_s[1] != from_e[1]:
    print 'error'
    return
  if rng[0] > rng[1]:
    print 'error'
    return
  pwd = os.path.abspath(os.curdir)
  xls = win32com.client.Dispatch('Excel.Application')
  try:
    wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
    sheet = wb.Sheets(1)
    c = 0
    for row in range(65535):
      if row >= from_s[0] and row <= from_e[0]:
        v = float(str(sheet.cells(row, from_s[1])))
        if v >= rng[0] and v <= rng[1]:
          sheet.cells(to[0] + c, to[1]).value = v
          c += 1
    wb.SaveAs(os.path.join(pwd, 'testout.xls'))
    wb.Close()
  except:
    print sys.exc_info()
  finally:
    xls.Quit()

if __name__ == '__main__':
  main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-

574:デフォルトの名無しさん
09/11/08 10:44:08
2003 初心者です。
ワークシートイベントで処理を抜け出すのはどうすれば・・
一度だけ計算させたいんですが。どこかで見た気がするのに探せない。


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Target.Value = Target.Value + 1
'この後どうすれば・・・・
End If
End Sub

575:デフォルトの名無しさん
09/11/08 11:14:38
>574

どっかのセルに実行済みをセットすれば?

576:デフォルトの名無しさん
09/11/08 12:57:57
>>574
Application.EnableEventsを使うが、実用になるChangeイベントを書くのはかなり難しいよ。
あきらめた方がいいと思うな。
真っ先に考えられる不具合は消した場合でも1になったりすることだな。
問題はこれだけじゃないからかなり難解。

577:デフォルトの名無しさん
09/11/08 13:35:30
>>575-576
どもです。そもそも無茶なことか・・・
初心者ゆえに「出来る・出来ない」が良くわからない

ありがとでした

578:デフォルトの名無しさん
09/11/08 14:05:32
staticでも使え

579:デフォルトの名無しさん
09/11/08 17:28:43
シート起動時に、フォームを出してそれを10秒後で消す。
その10秒の間に、フォーム内のTextboxの値を
ユーザーの任意で変更できるようにと考えましたが、
タイマーしてる間、フォームが白く固まって値変更ができません。
何か改善策はありますでしょうか。2003です。

Private Sub UserForm_Activate()
Dim MyWaitTime As Date
'10秒後に閉じる場合
MyWaitTime = TimeSerial(Hour(Now()), Minute(Now()), _
Second(Now()) + 10)
Application.Wait MyWaitTime 'マクロを指定の時間まで停止
Unload.対象日数の入力フォーム 'UserFormを閉じる
End Sub

580:デフォルトの名無しさん
09/11/08 17:44:47
イベントループ拾わんといかんだろ

581:デフォルトの名無しさん
09/11/08 17:45:47
C言語側で扱うためのバイナリファイルをVBAで出力していて
整数値は除算や剰余算を用いてバイト型配列に代入して出力しているのですが、
浮動小数値(単精度)をバイト型配列に含める場合にどう処理すればいいのか分からず困っています。
良い解決策をご教授頂ければ助かります。


582:デフォルトの名無しさん
09/11/08 18:10:19
URLリンク(program.station.ez-net.jp)
URLリンク(www.hi-ho.ne.jp)
URLリンク(piza.2ch.net)
URLリンク(support.microsoft.com)

583:デフォルトの名無しさん
09/11/08 22:34:13
>>581
配列に入れる理由がファィル出力のためだけなら、いちいち配列など使わずに
ファイルをBynaryモードで開いて整数も実数もそのまま出力してしまえばいい。
ただし、実数の内部表現が異なる場合は使えない。

どうしてもVBAの中で1バイトずつ取り出す必要があるなら、
Win32APIのMoveMemoryを使うぐらいしか方法がない。

584:デフォルトの名無しさん
09/11/09 20:42:51
#ファイル番号 でファイルにバイナリアクセスしている時に、
ストリーム位置を取得する方法を教えてください。
(Cのftell()相当の操作)

585:584
09/11/09 21:06:44
自己解決しました。
Seek( ファイル番号 ) で取得できました。

586:デフォルトの名無しさん
09/11/10 15:17:54
Private Sub UserForm_Initialize()

Dim lastRow As Long
Dim ReturnBook As Workbook, TargetBook As Workbook
Set ReturnBook = ActiveWorkbook
Application.ScreenUpdating = False
Set TargetBook = Workbooks.Open("D:\test\sample.xls")

With TargetBook.Sheets("Sheet1")
' ListBox1.ColumnHeads = True
Me.ListBox1.List = .Range(.Range("B2"), .Cells(.Rows.Count, 2).End(xlUp)).Resize(, 2).Value

ReturnBook.Activate
Application.ScreenUpdating = True
TargetBook.Close
End With
End Sub

削除区分  コード 商品名
0    1001 りんご
1  1002 みかん
0    1003 バナナ

こういう風な外部ブックに対して削除区分が1のデータをリストボックスに
表示しないようにするにはどうすればいいですか?教えてください


587:デフォルトの名無しさん
09/11/10 23:44:43
URLリンク(b.hatena.ne.jp)
会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま


588:デフォルトの名無しさん
09/11/10 23:48:02
マクロを組むのはズルじゃないが
他人が作ったマクロを勝手に使って
仕事を早く終わらせるのはズルだと思う
少しはリスペクトなりインセンティブなり気を使えと

589:デフォルトの名無しさん
09/11/11 15:13:14
その理屈でいくとPCも電卓もせめて一度は作ってから使えということになるが

590:デフォルトの名無しさん
09/11/11 15:25:27
その理屈でいくと家も会社もせめて一度は作ってから住め(従事)ということになるが

591:デフォルトの名無しさん
09/11/11 22:10:44
シート2の表を、シフト+編集で図のコピーを行い、シート1に貼るマクロを組みましたが、
そのシート1の貼りつけた図のコピーを切り取るマクロを組むと、ピクチャー番号が異なるために、できません。どうすれば、解決できますか?

592:デフォルトの名無しさん
09/11/11 22:21:57
以下のような動作をするマクロって、VBAで作成できますか?
(実現可能性だけ教えて頂ければ、自力でどうにかしたいと思います)

・処理内容
 Outlook2007で、
 特定の件名がついたメールは、メール内容表示の際にボタンを出現させて、
 ボタンを押すことでExcel2007にメールの内容を転記させる。
 例えば、以下のような感じです。

 ■Outlook
  件名:○○見積書
  メール内容:
  ○○費 \50000
  △△費 \100000
   ――-
  |ボタン|←ポチっとな
   ――-
 
 ■Excel
  A1セル:○○費
  A2セル:\50000
  B1セル:△△費
  B2セル:\100000
  が転記される
 
 


593:デフォルトの名無しさん
09/11/12 00:23:58
できるっちゃできる

594:デフォルトの名無しさん
09/11/12 00:28:37
シート上に下記のパラメータで長方形のオートシェイプを作りたくて書いたVBAです

Sub 四角形2()

Dim MyShape As Shape
Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 40, 425, 355, 90)

With ActiveSheet.Shapes.Range(MyShape.Name)
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.SchemeColor = 10
.Fill.Transparency = 0.5
End With

End Sub


しかし実際にはWith内で指定したパラメータは常に共通で
位置と大きさのみ違う複数のケースでの長方形を作りたいのです。

With~End WihtをPrivateFunctionに書いて、MyShapeの値を変えて参照させれば良いですか?

あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?

595:デフォルトの名無しさん
09/11/12 19:57:22
質問です。
あるフォルダに入っているテキスト形式のデータ10個を
エクセルで開いていくVBAのプログロムを書いている
のですが、エラー文で「データ_i.txtがありません」と表示されます。
私の書いたプログラムは下記です。

Sub テスト()
テスト Macro
Dim i As Integer

For i = 0 To 5
ChDir "C:\Documents and Settings\データ"


Workbooks.OpenText Filename:= _
"C:\Documents and Settings\データ\_i.txt" _
, Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Next i
End Sub

このプログラムの目的は、テキストデータの入っているフォルダを
他の名前に変更したときも、その中に入っているテキストデータ10個を
エクセルで展開するためです。おそらく
"C:\Documents and Settings\データ\_i.txt"のiの部分が間違えていると
思うのですが、どうすればいいでしょうか?よろしくお願いします。

596:デフォルトの名無しさん
09/11/12 20:10:08
知らんがな(´・ω・`)

597:デフォルトの名無しさん
09/11/12 20:32:33
"C:\Documents and Settings\データ\_" & i & ".txt"
としてやらんといかんのとちゃうかな

598:デフォルトの名無しさん
09/11/12 20:34:03
>595

データさんか?
普通はそこにアカウント名が入るんだが。

まさかとは思うがi.txtのiって・・・w

599:デフォルトの名無しさん
09/11/12 21:00:42
>>このプログラムの目的は、テキストデータの入っているフォルダを
>>他の名前に変更したときも、その中に入っているテキストデータ10個を
>>エクセルで展開するためです。

(・ω・`)???

600:595
09/11/12 21:12:37
みなさんアドバイス感謝です!

説明不足ですみません。

質問ではテキストデータと書きましたが、.datで保存されています。

フォルダの中に「_0.dat」「_1.dat」「_2.dat」…というデータが10個あります。

ほんとは10個開きたいのですが、とりあえず5個開けたら5を10に直せばいいかなと

思ってます。

>>597さん

\データ\_"&i&".dat"としましたが、コンパイルエラーになります。

dat形式のデータは無理なのでしょうか?


601:デフォルトの名無しさん
09/11/12 21:18:41
"C:\Documents and Settings\データ\_" & i & ".txt" _

死ね >>600

602:デフォルトの名無しさん
09/11/12 23:40:30
597見てダメなら何聞いてもダメだろ
スペルミスとかスペース抜けとかで質問されても困る

603:デフォルトの名無しさん
09/11/12 23:56:23
Range("G1").Select の
1をfor文使って
1~100までするにはどうすればいいでしょうか?

For n = 1 To 100
Range("D&n&").Select
だとエラーになります

604:デフォルトの名無しさん
09/11/12 23:59:00

Range("G1").Select ×
Range("D1").Select ○

605:デフォルトの名無しさん
09/11/13 00:00:00
Range("D" & n).Select

あるいは

Cells(n, 4).Select

606:デフォルトの名無しさん
09/11/13 00:06:08
>>595>>603は同じヤツか?

根本的に・・・

607:デフォルトの名無しさん
09/11/13 00:09:35
ActiveCell.FormulaR1C1 = "=-(R[+&n]C[-2]-R[-4]C[-2])"

R[+&n]を引数にする場合はどうでしょうか?

608:デフォルトの名無しさん
09/11/13 00:49:12
もはやネタだろ

609:デフォルトの名無しさん
09/11/13 00:53:26
ネタじゃないです><
ActiveCell.FormulaR1C1 = "=-R["&n&"]C[-2]-R[-4]C[-2]"
とかやってみたんですがダメでした

610:デフォルトの名無しさん
09/11/13 01:02:20
寝たとしてもまったく面白くない
もっと回答したくなるように質問しろ

611:デフォルトの名無しさん
09/11/13 01:03:42
>>594

AddShapeの引数を変数にして全体をループさせるだけでいいのでは?
共通パラメータをわざわざ関数にする必要はないと思う。

>あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?
ShapesのRangeプロパティは、指定したShapeのオブジェクトを返す。
この"指定した"というのが今回の場合はMyShape.Nameとなる。

正直わかりにくいし、Rangeなんて使った事無い。
With ActiveSheet.Shapes(MyShape.Name)
もしくは
With MyShape
このどちらかが一般的だと思ってるがどうだろうか。

>>607
>>595>>603に続いて同じ失敗をしている。
>>597を参考にして考えればわかる。

612:デフォルトの名無しさん
09/11/13 10:51:53
変数使ってセル座標の指定するなら、cells使った方が楽だと思ってる。

613:デフォルトの名無しさん
09/11/13 10:57:30
その方が速い

614:デフォルトの名無しさん
09/11/13 14:43:25
すまんが教えてください

vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。

ExecWBでやってみたけど上手く行かなかった。
SendKeysもいまいちだったし、出来るならやりたくない(違う作業が出来なくなるため)
やり方に問題があるのか、違う方法があるのか?

教えてください。

615:デフォルトの名無しさん
09/11/13 18:44:29
・自分に何かしら不幸な出来事が起きたとき、落ち込んでしまうのは仕方のない話。ショックが大きいほど、
 人前に姿をさらすのも苦痛になるものだが、そういうときの行動こそ、人間の大きさが見えるものかもしれない。

 米シカゴに住む34歳のティアン・ハリスさんは、 10月31日に幸せな花嫁となる予定が、6日前になって相手の
 男性から突然結婚の中止を告げられてしまった。式直前でのまさかの事態だが、さらなる追い打ちを
 かけられてしまう。慌てて母親と一緒にパーティー会場にキャンセルを申し出ると、もう返金は不可能と
 言われたそう。駐車場に座り込み落ち込むハリスさんと、なす術もなく見守る母親。そのとき、向かいに
 あった老人ホームを目にして良いことを思いついた。

 どうせ無駄にするならと、2人は向かいの老人ホームの人たちとパーティーを開こうと決断する。
 「寄付をしたい」とハリスさんが飛び込んだ老人ホームの施設長は、「彼女はここにいる誰も知らないだろうし、
 そんなオファーも受けたことない」(米紙ニューヨーク・デイリーニュースより)と驚いた。かくして、ハリスさんの結婚パーティーは、
 老人ホームのハロウィンパーティーへと変更。お年寄りたちも、思いもよらぬイベントを大いに喜んだという。

 300人近いお年寄りは思い思いに仮装して、ダンスに興じた。あるお年寄りは「とても楽しい時間だった」
 (米放送局CBSより)と語り、老人ホームに素敵なひとときをもたらしたハリスさんに感謝している。施設長も
 「彼女はどこからともなくやってきて、私たちに美しいパーティーを与えてくれた天使」とハリスさんを讃えた。

 会場の傍らでお年寄りの笑顔を見て満足したというハリスさんだが、本当なら自分が主役になるはず
 だったパーティーにやはり心境は複雑だったよう。母親も「会場で、皆さんの前にいるのが娘だったら
 よかった」と無念さを語り、施設長も「彼女は落ち込んでいたと思う」とハリスさんの心中を慮った。
 しかし、そうした中でもお年寄りたちに幸せな時間を与えたハリスさんの人柄に、施設長は「神は彼女を祝福し、
 きっとほかに良い人を見つけられる」と太鼓判を押す。

 ハリスさんは11月2日に、新婚旅行となるはずだったハワイへ1人で旅立ったそう。花嫁になり損ねてしまった
 ハリスさんだが、彼女が取った決断が多くの人に幸せを与えただけでなく、少なからず自分への励みに
 なったことを願いたい。(抜粋)
 URLリンク(www.narinari.com)

616:デフォルトの名無しさん
09/11/13 18:49:15
なげーよ 2行でギブw

617:デフォルトの名無しさん
09/11/13 19:33:04
質問です。
10ページある文書のうち、例えば2、5、7ページだけを印刷したい場合、


Sub 印刷()
Worksheets("文書").PrintOut from:=2, to:=2
Worksheets("文書").PrintOut from:=5, to:=5
Worksheets("文書").PrintOut from:=7, to:=7
End Sub


と、やるのでしょうか?
なにかもっと良い方法がありそうな・・・
OSはVISTA、バージョンは2007です。

618:デフォルトの名無しさん
09/11/13 21:27:48
Sub 印刷()
Worksheets("文書").PrintOut pages:=2,5,7
End Sub


619:あ
09/11/13 22:01:06
質問させて頂きます。
A1からA100に1から10の数字を入力するマクロを作成
していますが、無限ループになってしまいます。。

どのようにすればよろしいでしょうか?

Sub Ary()
Dim Arow As Long
Dim i As Long

For i = 1 To 600
Cells(i, 1).Value = i
If i = 10 Then
i = 1
End If
Next i

End Sub

620:デフォルトの名無しさん
09/11/13 22:26:21
>>619
個人的には
>For i = 1 To 600
に突っ込みたいが、まじめに答えるとi=10の時にi=1にしろって指示してるので
i=1 → 10 → 1 → 10 → の無限ループになってる
1,2,・・・10,1,2,・・・ と繰り返したいなら cells(i,1)=i%10 みたいに余りを計算すれば良い
(余りの計算は %じゃなくてmodとかかも知れない。忘れた)

621:デフォルトの名無しさん
09/11/13 22:27:52
ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ


622:デフォルトの名無しさん
09/11/13 22:57:12
>>619
カウンタ変数(i)をForループの中で書き換えるのは可能な限り避けた方がイイ
何回回ったかわかんなくなっちゃうよ

623:デフォルトの名無しさん
09/11/14 00:02:36
【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]

スレリンク(hidari板)




624:デフォルトの名無しさん
09/11/14 00:51:45
>>620
Dim Arow As Longに突っ込めよ

625:デフォルトの名無しさん
09/11/14 04:51:06
e = "& mi &" + 5 * "& c &" - 5

mi、c は変数です。
何がいけないのでしょうか?

626:デフォルトの名無しさん
09/11/14 05:13:52
お前は2chに書き込んではいけない

627:デフォルトの名無しさん
09/11/14 07:43:48
e = mi + 5 * c - 5
じゃダメなの?

変数が文字列の中に含まれちゃってるよ。
ただのmiって文字列としか認識されない。


628:デフォルトの名無しさん
09/11/14 08:59:38
>>619
Sub Ary()
Dim Arow As Long
Dim i As Long
Dim j As Integer

j = 1
For i = 1 To 600
Cells(i, 1).Value = j
j = j + 1
If j > 10 Then
j = 1
End If
Next i

End Sub
こんなものでどないでしょう。

629:デフォルトの名無しさん
09/11/14 09:49:32
Arow ってなんだ

630:デフォルトの名無しさん
09/11/14 10:04:03
正解(>>620-621)が出た後にボケ回答(>>622 >>628)が出てくる、の法則

631:デフォルトの名無しさん
09/11/14 10:12:07
自分よりいい答えが出たのがそんなに悔しかったのか

632:デフォルトの名無しさん
09/11/14 10:15:19
(;゚д゚)ァ

633:デフォルトの名無しさん
09/11/14 10:49:33
>>619
Sub Ary()
Dim Arow As Long
Dim r As Range

For Each r In Range("A1:A100")
r.Value = r.Row Mod 10
Next r

End Sub
こんなものでどないでしょう。

634:デフォルトの名無しさん
09/11/14 10:50:58
ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ


635:デフォルトの名無しさん
09/11/14 11:01:07
.Formular1c1="=Average(R["& c &"]C["& d &"]:R["& c+2 &"]C["& d+2 &"])"

のようにRCの中に変数を入れたい場合はどうすればいいのでしょうか?

アドバイスお願いします

636:デフォルトの名無しさん
09/11/14 11:07:03
馬鹿発見

637:デフォルトの名無しさん
09/11/15 01:17:24
四択問題を作っています。

Public Seikai As Integer, i As Integer, Ruiseki As Integer
Sub Quiz()
Dim Det As String
i = 1
Ruiseki = 0

Do

Det = Sheets("Sheet3").Cells(i, 1)
If Det = "" Then Exit Do
UserForm1.Show
i = i + 1

Loop While Det <> ""

UserForm2.Show
'MsgBox "正解は" & Ruiseki & "問です。"

End Sub

sheet3のA列に問題番号、B列に問題、C列に正解番号を入れています。
問題は50問作ったのですが、この中から20問をランダムに表示する
ようにしたいのですが、どのようにしたらいいかわかりません。
今は、50問全て順番に表示されてしまう状態です。
教えてください。
よろしくお願いします。

638:デフォルトの名無しさん
09/11/15 01:45:55
RAND()で適当な番号をふって並び替えて上から20問をつかう

639:デフォルトの名無しさん
09/11/15 13:25:55
>>618
ありがとうございます!
助かりました。

640:637です
09/11/16 00:26:37
>>638
マクロを具体的にどう変更したらいいかおしえてください…

641:デフォルトの名無しさん
09/11/16 08:16:40
>>640
例えば、D列に乱数で適当な数字を振る
D列を見て数の大きい順に20問を出題する

そこまで自分で作ったのなら、これくらいできるだろ?
宿題なら自分でどうぞ

642:デフォルトの名無しさん
09/11/16 11:18:19
マクロが
A
B
C
D
こうあったとして、全てのマクロを実行するマクロを作るにはどうやったらいいですか?

643:デフォルトの名無しさん
09/11/16 11:26:37
全てのマクロを呼び出すマクロを作ればいいだけだろ

644:デフォルトの名無しさん
09/11/16 16:52:03
Sub all_execute()
A
B
C
D
End SUb



wwww


645:デフォルトの名無しさん
09/11/16 20:20:05
私は基本C/C++のPGです。業務でVBAの面倒を見ることになりそうなんですが、
言語仕様がコンパクトにまとまってるような本はないでしょうか?

VBAの仕様なんてたかが知れてるかもしれませんが、分厚い本やWEBサイトをいったりきたりするのは面倒だし
言語に自分の知らない部分があるというのが気持ち悪い性分なので、まとまってる本を探しています(WEBでもいいのですが)

・プログラミングの知識前提で、
・ペラッペラの単色刷りで
・言語使用だけは満足してる
オライリーのクイックリファレンスのVBA版みたいなのが理想です(探したけどなかった)。

VBAの解説本だとプログラミング未経験者向けの、カラフルで妙に分厚い本が多いような気がするのですが
私としてはクイックリファレンス的な本が理想なので…
お勧めの本などあれば教えてください。

646:デフォルトの名無しさん
09/11/16 22:17:54
VBA辞典

647:デフォルトの名無しさん
09/11/16 22:23:14
>>645
マジレスだけどリファレンスとしてはオンラインヘルプ一択
結局ヘルプ以上にならないから初心者向けの分厚いカラー刷りになる
紙がよければ死ぬ気で全部印刷


648:637です
09/11/17 00:26:19
>>641
RAND()で、
B列とC列のくみあわせは変わってしまうことは無いのですか?

649:デフォルトの名無しさん
09/11/17 00:28:24
>>648

ここはマ板ですよ?

650:637です
09/11/17 00:38:30
>>649
死ねクズ

651:デフォルトの名無しさん
09/11/17 00:39:17
>>648
おまえの前にある箱の向こうにも人がいるんだぜ
>>638>>641 も的確な回答してるじゃん
それに対して、あーじゃない、こーじゃない、って・・・
更に質問するんだったら

ありがとう御座います。ヒントを基に組んでみたら、こんな動作をしました。
ここが怪しいと思うので、調べたり試行錯誤したのですが、こんなエラーが出てしまいます。
何かアドバイス頂けないでしょうか?

くらい書いたほうがいんでね?

なんとなくムカつく文章だったので勢いで書いた

652:デフォルトの名無しさん
09/11/17 00:56:42
的確?

653:デフォルトの名無しさん
09/11/17 01:01:43
>>652
的確だと思うぞ。

654:デフォルトの名無しさん
09/11/17 08:15:19
>>653

俺も的確だと思うけどな。
質問する側のレベルが低いんだろw


655:デフォルトの名無しさん
09/11/17 08:40:16
おまいらココ逝って正しいRANDの使い方教えてきやがれ
URLリンク(www.nicovideo.jp)

656:デフォルトの名無しさん
09/11/17 09:03:50
【社会】スーパーコンピュータ向け「Excel」開発中 - Microsoft
スレリンク(newsplus板)

657:デフォルトの名無しさん
09/11/17 11:57:24
A2~A20000ぐらいまで誕生日(シリアル値)が入っています
B列に年齢を出したいときは、どういう計算をすれば軽くなるでしょうか?
古いPC(win95)なのでものすごく時間がかかっています
他のマクロでも応用したいので、教えてください
お願いします!

658:デフォルトの名無しさん
09/11/17 17:49:46
関数にdatedifってのが有るから

=DATEDIF(A2,TODAY(),"y")

で済むと思うけど、どうしてもVBA上から使いたいならworksheetfunctionを付ければ?



659:デフォルトの名無しさん
09/11/17 19:25:58
ワークシートに関数を沢山入れると重くなる、という意味に解釈して
VBAにて
Range("B2").Value = DateDiff("yyyy", Range("A2").Value, Now)
を必要行だけ繰り返す

660:デフォルトの名無しさん
09/11/17 19:54:25
>>643-644
単純に考えればいいってことがわかった気がする
どうも

661:デフォルトの名無しさん
09/11/17 22:22:18
>>660
他のファイルとかに書いてあるのを呼ぶときはスコープが問題になることがあるから気をつけてね
Public宣言付けたり、参照設定したりとか

662:デフォルトの名無しさん
09/11/18 09:58:30
ハイパーリンクに関する質問です。
例えばセルA1に何か文字列が入っている状態で
セルA2に以下のシート関数が入っているとします。
=IF(A1="","",HYPERLINK("URLリンク(www.yahoo.co.jp)","Yahoo"))
そうすると、セルA2には"Yahoo"の文字列が表示され
"URLリンク(www.yahoo.co.jp)"へのリンクが張られている状態です。

ここで、VBAにより、リンク先である"URLリンク(www.yahoo.co.jp)"の文字列を
取得する方法はあるのでしょうか?
セルA2に設定されている関数の文字列を解析するという手もあるとは思いますが、
それ以外で方法はあるのでしょうか?


663:デフォルトの名無しさん
09/11/18 14:09:25
あるんじゃない

664:デフォルトの名無しさん
09/11/18 14:14:34
>>658-659
とてつもなく軽くなりました、ありがとうございました!


665:デフォルトの名無しさん
09/11/18 16:45:42
>>664
>>658の数式でも軽くなったの?
もし重かったら揮発性関数のTODAY()のせいだな。
どこかのセル、たとえばF1にCtrl + ;で今日の日付を求めて
=DATEDIF(A2,$F$1,"Y")とすれば数式でも軽くなるかもよ。

666:デフォルトの名無しさん
09/11/18 22:41:02
1日か31日までの1ヶ月分のシートがあるとします
それぞれのA1セルに日付をいれてます
この1ヶ月分のシートの月曜日と火曜日だけを対象してなんらかの処理を行いたいときはどのような方法を取ればいいでしょう?
よろしくお願いします

667:デフォルトの名無しさん
09/11/18 23:30:02
1日か31日までってことは
1日の場合は前月の2日から一か月分って言う意味?

668:デフォルトの名無しさん
09/11/18 23:32:15
>>666
for each collectionでシートに対してループ回して
その中でA1セルを調べて、曜日をチェック
で、なんらかの処理を行えばOK

669:666
09/11/18 23:36:40
失礼しました
1日から31日までの31シートです

>>66
ぐぐってみます8

670:デフォルトの名無しさん
09/11/19 09:19:43
ワード・アクセスのVBAスレってありませんか?

671:デフォルトの名無しさん
09/11/19 09:24:37
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)
スレリンク(tech板)

672:デフォルトの名無しさん
09/11/19 11:42:02
ありがとうございます
検索しにくいっす・・

673:デフォルトの名無しさん
09/11/19 19:46:28
WordのVBAはどういうときに使うんだ?

674:デフォルトの名無しさん
09/11/19 20:13:37
時節柄考えられるのは
年賀状宛名流し込み印刷かな

675:デフォルトの名無しさん
09/11/19 20:27:20
それVBAいらないやん

676:デフォルトの名無しさん
09/11/19 21:46:41
差し込み印刷なんかExcel VBAでも同等のことするの簡単だよな。

677:デフォルトの名無しさん
09/11/19 21:49:26
A1セルに1月1日(月)のように入力しています
ここから特定の曜日(火曜日と日曜日など)を区別して処理をおこないたいのですが
どのような方法を取ればよいのかご教授ねがいます

678:デフォルトの名無しさん
09/11/19 22:10:09
>>677
おまえ666だろ
曜日を調べる関数を使う
関数名は自分で調べろ
以上

679:デフォルトの名無しさん
09/11/19 22:43:03
そもそも1月1日(月)って入力するのが間違いだ罠。
1/1と入力して表示形式をm月d日(aaa)にするだけだ。

680:デフォルトの名無しさん
09/11/20 05:56:15
質問
教えてえろい人
エクセルのVBAを使って、Outlookメールを複数の人に自動送信操作をさせたいです。
Aさん(○○○@○○.co.jp)にエクセルSheet1に記載された内容を送信し、
Bさん(XXX@XX.ac.jp)にエクセルSheet2に記載された内容を送信します。
後、CさんにエクセルSheet3を・・・という具合に・・・
以上の事が、エクセルVBAを使って1回だけマクロを走らせるだけで、できるでしょうか?



681:デフォルトの名無しさん
09/11/20 07:34:40
ユーザーフォームのlistviewについて質問です
listviewで縦横のスクロールバーのやり方が分からないのですが
どうすればうまくいくでしょうか?

682:デフォルトの名無しさん
09/11/20 11:22:46
>>680
できるでしょうね

683:デフォルトの名無しさん
09/11/20 11:48:16
てst

684:デフォルトの名無しさん
09/11/20 21:52:10
>>680
ExcelのよりOutlookのVBA使ったらどうよ?

685:デフォルトの名無しさん
09/11/20 22:27:51
同一セル内の数字を下のように並べかえたいのですがどうすればいいですか?
「333      「111
 111   ⇒   333
 555」      555」

3桁ずつ切り分けて別セルに出力、ソートをかけて並べかえるというものは
出来たのですが、出来ればマクロの中だけで処理をしたいんです。

686:デフォルトの名無しさん
09/11/20 23:13:54
>>685
安直だけど、例えばセルA1を対象とするならこんな感じ

Sub Macro1()
a = Split(Range("A1").Value, Chr(10))
For i = 0 To UBound(a) - 1
For j = i + 1 To UBound(a)
If a(i) > a(j) Then
tmp = a(i)
a(i) = a(j)
a(j) = tmp
End If
Next j
Next i
Range("A1").Value = Join(a, Chr(10))
End Sub


687:デフォルトの名無しさん
09/11/20 23:17:11
こんにちわ。
質問をさせてください。

正規表現でのマッチパターンを用いて、
文字列をSplitして配列に入れたいと考えています。
以前javaで行った時は問題無く出来たのですが、
VBAの場合には上手くパターンを認識してもらえません。
下のコードで行ったのですが、”スペース”or","の1回以上の繰り返しでSplitを目的としています。

Sub testVBA()
Dim Reg As Object
Dim regPattern As String
Dim reMatch As Object
Dim i As Integer
Dim STR As Variant

Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = "[ ,]+"
STR = Split("moug MOUG,モーグ,,もーぐ", regPattern)
For i = 0 To UBound(STR)
Debug.Print (STR(i))
Next
End Sub

続きます。

688:デフォルトの名無しさん
09/11/20 23:17:20
javaのコードは下で行いました。

import java.util.regex.*;
public class testJava {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[ ,]+");
String[] strs = pattern.split("moug MOUG,モーグ,,もーぐ");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
}
}

VBAで出来るのであればやり方を教えてくださいませ。
VBAでは対応していないと言う事でも構いません。
何卒よろしくお願いします。

689:デフォルトの名無しさん
09/11/20 23:18:42
すいません・・・。
モーグで質問しようとして準備していた文書を張ってしまいました。
ちなみにマルチポストではありませんので、よろしくお願いします。

690:デフォルトの名無しさん
09/11/21 00:40:26
>>687
VBAのSplitが正規表現を受付けないんじゃないの

s = "123 456 789"
ArySize = 0
Dim Ary()
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "[ ,]+"
Do
ArySize = ArySize + 1
ReDim Preserve Ary(ArySize)
Set Matches = re.Execute(s)
If Matches.Count <> 0 Then
v = Left(s, Matches(0).FirstIndex)
s = Right(s, Len(s) - (Matches(0).FirstIndex + Matches(0).Length))
Else
v = s
End If
Ary(ArySize - 1) = v
MsgBox v
Loop While Matches.Count <> 0
MsgBox Join(Ary, "$")

691:687
09/11/21 08:37:43
>>690
レスありがとうございました。
やはりVBSのオブジェクトですし、VBAのsplitが対応してないのは頷けます。
ソース例の提示、ありがとうございました。
自作関数で対応しようと思います。

重ね重ねありがとうございました。

692:デフォルトの名無しさん
09/11/21 10:02:39
excel2007

ブックに変更が有った時に保存するようにしたいのですが、変更が有ったか無かったかのチェックって
どうするのでしょうか?

保存するのはThiworkbookの閉じる時で

Private Sub Workbook_BeforeClose(Cancel As Boolean)


End Sub

の中に入れれば良いのでしょうけれど。


693:デフォルトの名無しさん
09/11/21 11:15:06
>>692
If WorkBook.Saved = False Then
  '保存処理
End If

694:デフォルトの名無しさん
09/11/21 11:21:38
>>693
thxです!

695:デフォルトの名無しさん
09/11/21 12:50:52
WinVista-Excel2007

VBAでなくActiveXの問題かもしれませんが
VBAの編集中に起きた問題なのでコチラで。

先にActiveXのボタンを配置しVBAで記述したSub{}を実行するという簡単なものを複数作成していたのですが
5・6個作り終えいざ実行してみようとボタンを配置してあるワークシートを開こうとしたところ
ボタンは表示されずエラー(特定のエラー名表示されず)が起きExcelが強制終了してしまいます。

また新規作成でActiveXのボタンを新たに配置しようとしても同じ現象が起こりました。
アドインも複数導入している状態のためもしかするとVBAの可能性も捨てきれないのではと質問させて頂きました。

対処法・解決策はございますでしょうか?
宜しくお願いいたします。

696:デフォルトの名無しさん
09/11/21 13:18:23
>>695
俺は何に原因がわかるかは知らないし、
ActiveXに関係ない話だが俺の話を聞いてくれ

Excel VBAでプログラム作ったんだよ。
クラスとかwitheventsとか使ってね。

そしたらなぜかExcelが強制終了するんだよw
いや、しないときもある。するときもある。
自分のマシンでは強制終了するのに、他のマシンでは動くとか
新しくExcel作ってソース全部移植したら直るんだよ。
でもしばらくするとまた強制終了するようになるんさよ。

原因さっぱりわかんねw
俺は思ったね。Excelで無理しちゃいけねぇ。
単純なマクロ程度で終わらせておくべきだって。

697:デフォルトの名無しさん
09/11/21 13:42:52
>>695
起動時に強制終了するアドインでも作ったんじゃね?


698:デフォルトの名無しさん
09/11/21 14:51:42
>696
わかる

699:685
09/11/21 15:14:26
>>686
出来ました。
ありがとうございました。

700:デフォルトの名無しさん
09/11/21 16:15:33
パチンコ店 ATM8000台 IIJ社 今後4、5年で全国に
URLリンク(www.jcp.or.jp)
2chとパチンコ屋が無くなれば日本の景気は上向くかもな

701:デフォルトの名無しさん
09/11/21 18:55:37
>>695 >>696
俺も似たような現象で悩んでいる。
アドイン複数入れて、VBAでプログラム作って2~3回動かすのには問題ないんだが
しばらく使ってExcelを終了させると、
「問題が発生したため、Microsoft Office Excelを終了します。ご不便をおかけして申し訳ありません。」
とかいうふざけたエラーが出てくる。

俺の記憶が確かなら、
グローバル変数とか配列を大量に使いだした辺りでぶっ壊れた気がする。
メモリを開放しなきゃいけないとか、そういうことなのか???

702:デフォルトの名無しさん
09/11/21 19:05:46
エクセルのブック自体が変なメモリリークをしてぶっ壊れるってのをよく聞くぜ。

703:デフォルトの名無しさん
09/11/22 00:08:50
>>680
MSのサイトにoutlook使ったメール送信のサンプル見つかると思うから
それを参考にしたら?
Accessに取り込んだ内容を登録したメアドにoutlook使って送信するPG
を昔作ったことがあるから、出来るはずだよ
ウイルス対策用(だろうなぁ・・)で1通単位でダイアログ押という仕様の
回避用のexeも見つかると思うから探してくれい


704:デフォルトの名無しさん
09/11/22 14:29:02
excel 2007
xp sp3

Sheet1のA1にSheet2を参照とした「=SUM(Sheet2!$A$2:Sheet2!$A$3)」を入れる為のマクロ、

Sub test()
Sheet1.Cells(1, 1).Formula = "=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"
End Sub

ですと、Sheet1のA1には同一シートを参照とした「=SUM($A$2:$A$3)」となってしまいます。

"=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"の部分を
"=SUM(Sheet2!$A$2:Sheet2!$A$3)"にすれば解決するのはわかっておりますが、
どうしてもcellsを使いたく質問させていただきました。
解決策がありましたら、宜しくお願いします。


705:デフォルトの名無しさん
09/11/22 14:39:40
>704

突っ込み所がいろいろと・・・
本題は数式のINDIRECTで解決しそうな気がするが?

706:デフォルトの名無しさん
09/11/22 14:51:06
>>704
Sheet2.Cells(2, 1).Address
が何を返すかを考えればいいんじゃね?

Sheet2.Cells(2, 1).Addressって書き方をするのも珍しい.....

707:デフォルトの名無しさん
09/11/22 19:21:46
プログラミング経験なしで興味を持ち趣味で覚えたいと思い色々考えた結果、
javascriptとvbscriptを学ぼうと思いました。入門するために言語について探しているうちに、
下記のようなことがしてみたいと思ったのですが、出来るのかということと、
もっと適した言語があるのかをご存知であれば助言くださるとうれしいです。

過去の株価を利用したシミュレーションプログラム。
具体的には、データとして興味のある某銘柄の日柄(日別に始値、高値、安値、終値、出来高)
を10年分オープンオフィスの表計算calcにyahooファイナンスから入手しました。
例えば、このデータを使って特定の日にその株を1000株買い、以降10円上がれば売り、売り値から
10円下がればまた買い、その買値より10円下がれば買い増し(仮の現金残高がなくなるまで)し、
それぞれは買値より10円上がると売る。
持ち株がなくなると、高値から1割下がったところからまた始める。
というようなことを繰り返すと、いくらの利益でいくらの買値ので
どれぐらい持ち株になった状態かを結果としてだすものです。

javascriptやvbscriptでも出来るのでしょうか、それとももっと別のスクリプト
言語の方が適しているのでしょうか?
よろしくお願いします。。

708:デフォルトの名無しさん
09/11/22 20:19:54
何か変なヤツが迷い込んでるな~

709:デフォルトの名無しさん
09/11/22 20:45:53
>>707
ようは売買システムのバックテストしたいんだろ
できるよ

というか言語で出来ることが制約されるケースは少ない
もちろん得意、不得意はあるけど
ってことで好きな言語使いな
そして、このスレ以外に逝け

710:デフォルトの名無しさん
09/11/22 20:56:01
>>707
ExcelVBAがいいんじゃないか?

711:701
09/11/22 20:57:29
>>702
MSのバグかよ。

データはエクセルから取得して、処理は他(とりあえずDelphiを考えている)でやって、
結果をまたエクセルに返すかな・・めんどくさ・・

712:デフォルトの名無しさん
09/11/22 21:10:43
うっはっっw

MSのバグ扱いかよw

713:701
09/11/22 21:26:24
>>712
じゃあ原因は何なんだよ

714:デフォルトの名無しさん
09/11/22 22:12:12
確かに、ウィンドウズもエクセルもMSだな。
そう考えたら、世の中で起きるバグの50%はMSのバグと云っても過言ではない。

715:デフォルトの名無しさん
09/11/22 22:31:13
>>714
だがオレのPCのバグは99%オレのバグと言っても過言ではない

何度PCや開発ソフトのせいにして、その後取り下げたことか・・・

716:デフォルトの名無しさん
09/11/22 22:41:02
>>715
wwwww

717:デフォルトの名無しさん
09/11/22 23:50:32
>>715
まぁ、シンタックスエラーなら仕方ないな。

718:デフォルトの名無しさん
09/11/23 10:52:45
>>510-544
お前らwwwww
今更だけどツボったwwwww
そういうセンスがいるんだなコーディングって俺まだまだだわ。

719:デフォルトの名無しさん
09/11/23 11:34:44
>>707
15マソぐらいとちょっと高いけど、検証くんなどソフトもあるぞ

720:デフォルトの名無しさん
09/11/23 15:05:25
excel2003

こんにちは

For Nextを使い、
セルE5、E6、E7へそれぞれ「H線」「L線」「中心線」という文字を入れたいのですがどうすればよろしいでしょうか?

For i = 1 to 3
Cells(5,i + 4) = ?
next i

721:デフォルトの名無しさん
09/11/23 15:30:19
x = Array("H線", "L線", "中心線")
For i = 1 To 3
Cells(5, i + 4) = x(i - 1)
Next i

初心者の発想はこんな感じ。

722:720
09/11/23 15:45:34
>>721

早速のご回答、誠に有り難うございます。
>>721様のおかげで解決できましたので、心より御礼申し上げます。


723:デフォルトの名無しさん
09/11/23 16:22:36
初心者に配列はいきなりきついんじゃないか?

724:デフォルトの名無しさん
09/11/23 16:31:36
>>720
For-Next使う必要ないじゃん

For i = 1 To 3
Next i
Range("E5").Value = "H線"
Range("E6").Value = "L線"
Range("E7").Value = "中心線"

725:デフォルトの名無しさん
09/11/23 17:07:02
>>723
配列無しで出来る?
俺には思いつかなかった

726:デフォルトの名無しさん
09/11/23 17:21:26
>>724よく見たら笑えるww三回回ってワン

あれは配列のお勉強だったんじゃね?

727:デフォルトの名無しさん
09/11/23 17:32:17
For i = 1 to 3
Cells(5,i + 4) = Iif(i=1,"H線",Iif(i=2,"L線","中心線"))
next i

配列思いつかなくてもできるじゃん不気味で自分はこんなの書きたくないけど。

728:デフォルトの名無しさん
09/11/23 18:01:59
なんでループにすんの?

729:デフォルトの名無しさん
09/11/23 19:07:59
これはどうですか
For i = 1 To 3
Cells(5, i + 4) = Choose(i, "H線", "L線", "中心線")
Next i


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch