Excel VBA質問スレ Part13
- 1 :デフォルトの名無しさん:2009/09/30(水) 12:25:04
- 過去スレ
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/
- 2 :デフォルトの名無しさん:2009/09/30(水) 13:09:23
- ExcelのVBAに関する質問スレです
前スレ http://pc11.2ch.net/test/read.cgi/tech/1054356121/
★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)
- 3 :デフォルトの名無しさん:2009/09/30(水) 13:12:29
- いちおつ。
前スレ
Sleep 1
の1はミリ秒だから、1秒なら1000を指定ね。
- 4 :デフォルトの名無しさん:2009/09/30(水) 17:22:10
- 2003のExcelで作成したVBAが出向先の2007のExcelでは期待した動作をしませんでした。
どのようにコードを書き直せばよいのでしょうか教えてください。
XPsp3におけるIE8ブラウザにおいてinput=file型のフォームにファイル名を入力するものです。
以下コードです。
Sub PageUpCSV(objIE As Object)
With objIE
.Visible = True
'fileの入力 form name =CSVFile
.Document.all.CSVFile.Select 'ファイル入力窓を開く
Application.SendKeys " C:\test.txt ", True 'ダイアログにファイル名を送信
'Application.SendKeys "%o", True 'ALT+oを送信=ダイアログの開くをクリック
'
.
. その他処理
.
End With
End Sub
2007だとどうしてもC:\test.txtがダイアログに記入されません。空白のままです。
初めての2ch書き込みで失礼があるかもしれませんが、どうかお力を貸してください
- 5 :デフォルトの名無しさん:2009/09/30(水) 18:04:28
- >>4
OSとIEのバージョンは、どっちの環境でもXP SP3にIE8で同じ?
- 6 :デフォルトの名無しさん:2009/09/30(水) 18:15:07
- >>5
はい,どちらもXP SP3 IE8です。
- 7 :デフォルトの名無しさん:2009/09/30(水) 18:26:52
- >>6
キー入力の前に、ちゃんとページの表示が完了するまで待つようになってる?
- 8 :デフォルトの名無しさん:2009/09/30(水) 18:42:46
- そのつもりです。 表示完了の問題かと思い、
Sub WAIT(myTime As Single)
Dim TSTART As Single
TSTART = Timer
Do
DoEvents
Loop Until TSTART + myTime < Timer
End Sub
や
Do While .Busy = True And .ReadyState <> 4
DoEvents
Loop
をダイアログが開く前後に入れて色々チェックをしてみたのですが開いたダイアログにはカーソルが行くだけで値が入りません。
値が入ってから消えているわけではないようです。
- 9 :デフォルトの名無しさん:2009/09/30(水) 19:42:08
- 手作業ではちゃんとできるのか?
手作業と同じようにやってるのか?
- 10 :デフォルトの名無しさん:2009/09/30(水) 19:55:58
- >9
手作業ではできますし、手作業同様の指示をだしているつもりです。
ダイアログが開くまでは期待通りの動きをしています。
Select以降にwaitを15秒とってもダイアログには何も記入されません。
- 11 :デフォルトの名無しさん:2009/10/01(木) 16:12:31
- >>5 >>6 >>9 の方へ
自社で2007をインストールして試したところ、vbaはきちんと動きました。
verの問題ではなかったようです。今のところ何か常駐ソフト等が原因なのではと考えています。
ありがとうございました。
- 12 :デフォルトの名無しさん:2009/10/01(木) 20:17:45
- OS XP
SOFT EXCEL2007
1つのブックに300近いシートがあり、これを串刺し演算したいです
しかしピボットテーブルを使おうと思っても4シートしか串刺しできません
vbaではとんでもない行数になると思います
こういう場合どうすればいいかヒントを下さい
- 13 :デフォルトの名無しさん:2009/10/01(木) 20:26:15
- >>12
たとえばシートが300枚あったとして、全シートのセルA1の合計ならこういう式
=SUM(Sheet1:Sheet300!A1)
で一発で求められるけど、それ以外にどういう計算をしたい?
- 14 :デフォルトの名無しさん:2009/10/01(木) 21:30:24
- >>13
情報は商品番号(100種以上)と数量だけなんですが商品番号がランダムに並んでるんです
串刺ししつつ商品の合計を出したいのです
そんなのできますか?
- 15 :デフォルトの名無しさん:2009/10/01(木) 21:50:36
- 【1 OSの種類 .】 Windows XP P
【2 Excelのバージョン 】 Excel2003
【3 VBAが使えるか .】 勉強中
【4 VBAでの回答の可否】 可 よろしくお願いします。
VBAで
= Application.WorksheetFunction.Average(Worksheets("sheet1").Range(Cells(1, 3), Cells(10, 3)))
のように average でC1からC10まで求めるやり方ははかりました、
A3、A6、A9、A12 「Cells(1,h*3)」 のような飛び飛びのセルを
average したいのですがどのようにすればよいですか?
教えてください。よろしくお願いします。
- 16 :デフォルトの名無しさん:2009/10/01(木) 21:52:18
- 作業列使うとか条件式使うとかわずらわしくなるけど出来ないこともない
現状の体裁を変えないならVBAでも変数に格納するなり
出来ることは出来る
- 17 :デフォルトの名無しさん:2009/10/01(木) 22:00:37
- >>14
複数のシートタブをShiftを押しながら指定する方法だと4枚までしか集計できない。
それじゃなくて、ピボットテーブルウィザードから「範囲の追加」を使えば
300枚のシートに別れたデータをいっぺんに集計できるようにはなる。
ttp://office.microsoft.com/ja-jp/excel/HA102265851041.aspx
けど、入力にめっちゃ手間がかかる。
VBAでピボットテーブルを作るのが早いと思う。
- 18 :デフォルトの名無しさん:2009/10/01(木) 22:25:37
- >>17
ありがとうございます
頑張ってみます。
- 19 :デフォルトの名無しさん:2009/10/02(金) 00:03:19
- WindowsXP Excel2000
Sheet1に列固定、行不定の約10000行ほどのデータを加工して
Sheet2に表示させたいのですが、馬鹿正直にfor文とかでまわして
セルに格納していってたら、処理速度がえらいことになりました。
非表示や再計算を手動化等やってみたのですが、やはりまだまだ遅いです。
何か良い案は無いでしょうか?よろしくお願いいたします。
- 20 :デフォルトの名無しさん:2009/10/02(金) 00:09:01
- セル格納は配列が協力
配列(myRow,0) とか作って、
range("B1:B" & myRow) = 配列 ←配列(,)じゃ無くて括弧なしの「配列」
で超高速
- 21 :デフォルトの名無しさん:2009/10/02(金) 00:14:40
- >>20様
ご教示ありがとうございます。
カッコ無しの配列ですね。試してみます!
- 22 :デフォルトの名無しさん:2009/10/02(金) 00:27:58
- for myRow = 0 to 行 -1
配列(myRow,0) = cells(myRow,2) ' 配列にB列のセルを格納
next
こうやって格納した後にだな、いちおう
- 23 :デフォルトの名無しさん:2009/10/02(金) 02:12:29
- >>20,22様
処理速度を10分の1程度まで落とすことができました!
あとはデータ加工部分での処理等をもっと軽くできないかやってみます。
アドバイス、ありがとうございました。
- 24 :デフォルトの名無しさん:2009/10/02(金) 04:46:07
- >>22
全然違う。
セル2個以上の範囲のValueプロパティは2次元配列なので、それをVariant型変数に格納してからアクセスすればよい。
- 25 :19:2009/10/02(金) 06:46:59
- >>24
私が現在行っている方法で問題がある場所があればご指摘ください。※重要な場所のみ記載します
Dim C() As Variant
Dim output As Variant
'データ行数の確認
myRow = 1
Do While Sheets(1).Cells(myRow, 1) <> ""
myRow = myRow + 1
Loop
’配列サイズの確定
ReDim C(datasize - 1, 56)
'データ加工(実際はもっと色々やっています)
For i = 1 To myRow '行
For j = 1 To 10 '列
Select Case j
Case 1 To 5
output = Sheet(1).Cells(i, j)
Case 6 To 10
work = Sheet(1).Cells(i, j)
output = Sheets(2).Cells(work + 2, 3)
End Select
C(i - 1, j - 1) = output
Next j
Next i
'加工完了。データをセルに格納
Sheets(3).Range("B5:B" & myRow, "J5:J" & myRow) = C
- 26 :デフォルトの名無しさん:2009/10/02(金) 06:49:58
- ReDim C(datasize - 1, 56)は
この例ではReDim C(myRow - 1, 10)の間違いでした。失礼しました。
- 27 :デフォルトの名無しさん:2009/10/02(金) 07:45:50
- 最近質問や回答がまともなのが多いな。
いいことだ。
- 28 :デフォルトの名無しさん:2009/10/02(金) 08:46:13
- Yahooオークションの入札履歴から
落札者と入札額の取得をしエクセルのセルに書き込もうと考えています。
WEBクエリを使ったところ 何回か動かすと
真っ白い画面になって まったく取得できなくなります。
試しにIEなどブラウザで開いてみると 特に問題なくページを開くことができます。
真っ白にならないいい方法はありますでしょうか・・・?
OSは XP でIE8 Office2007
と Vista IE8 Office2007
を使用しています。
- 29 :デフォルトの名無しさん:2009/10/02(金) 08:47:55
- 取得部分を抜粋します。
AuctionPageID = "http://page.auctions.yahoo.co.jp/jp/show/bid_hist?aID=" & ActiveCell.Offset(0, 1).Text
Workbooks.Add
page = pageID
With ActiveSheet.QueryTables.Add(Connection:="URL;" + AuctionPageID, Destination:=Range("A1"))
.Name = "..."
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
どうぞよろしくお願い致します。
- 30 :デフォルトの名無しさん:2009/10/02(金) 17:59:53
- HPが開けないトラブルって言うのは大抵がデータを読み込む前に処理を行うからなんだけど
5秒くらい待機したら問題ないことがある
- 31 :デフォルトの名無しさん:2009/10/02(金) 19:06:29
- 全くの素人ならExcel vbaとACCESSvbaのどちらが取っ付きやすいですか?
- 32 :デフォルトの名無しさん:2009/10/02(金) 19:12:54
- EXCEL
ACCはレコードアクセスが基本になる上、ADOだとか使う必要がある
- 33 :デフォルトの名無しさん:2009/10/02(金) 21:22:43
- こんばんは。質問です。よろしくお願いします。
エクセル2003です。VBA
VBAで、
A1:A100 で "月" と表示のあるもの かつ
range(cells(10,h*3),cells(100,h*3)) で0より大きいものを
平均したいのですが、、、
sub k()
if If Range("A1:A100") = "月" Then
この先がわかりません。教えてください。お願いします。
”〜かつ〜”のVBAでの表現法がわかりません。
- 34 :デフォルトの名無しさん:2009/10/02(金) 21:49:53
- 数式でもいいの?
それともVBAを使うことが目的なの?
このケースだとかなり基本的なことから説明しなくちゃだから、後者なら大変なんだが
- 35 :デフォルトの名無しさん:2009/10/02(金) 22:04:00
- >>34
後者です。
VBAでの答えをよろしくお願いします。
説明は大変ということなのでいりません。
VBAの本があるのでそれで調べて見ます。
本当に知りたいのはVBAで、
IFで真のときにさらにもう一回IFで違う条件でかける方法です。
- 36 :デフォルトの名無しさん:2009/10/02(金) 22:16:58
- >>33
「”〜かつ〜”のVBAでの表現法」とのことですので、下のサンプルを参考にしてください。
Sub msgTest()
' セルA1に「メッセージ」かつ、B1に「表示する」と入力されている場合にメッセージ表示。
If (Cells(1, 1).Value = "メッセージ") And (Cells(1, 2).Value = "表示する") Then
MsgBox "2条件とも満たしている"
End If
End Sub
- 37 :デフォルトの名無しさん:2009/10/02(金) 22:43:04
- >>35
演算子で繋いでも良いけど、ネスティングで良いと思うよ。
if a = 1 then
if b = 1 then
if c = 1 then
msgbox "aaa"
end if
end if
end if
- 38 :デフォルトの名無しさん:2009/10/02(金) 23:27:12
- >33
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
丸投げならEXCEL相談室へどうぞ
その前に、CELLSの使い方の再確認を
http://www.happy2-island.com/excelsmile/smile03/capter00501.shtml
- 39 :デフォルトの名無しさん:2009/10/03(土) 00:50:56
- ヘルプの使い方をテンプレに入れたらdat落ちだな
- 40 :デフォルトの名無しさん:2009/10/03(土) 03:04:59
- >>37
演算子でつなげるものと同じ意味のIfネストは、なんだか格好悪いよね。
- 41 :デフォルトの名無しさん:2009/10/03(土) 03:06:40
- VBAって短絡評価が無いからIfネストの方がパフォーマンスが良かったりうんぬん
- 42 :デフォルトの名無しさん:2009/10/03(土) 07:50:07
- >>36
>>37
ありがとうございました。
- 43 :デフォルトの名無しさん:2009/10/03(土) 08:49:12
- コードが冗長になってくると、一括判定が必要な演算子連結よりもネスト構造のほうが優れているとかなんとか
- 44 :デフォルトの名無しさん:2009/10/03(土) 10:29:10
- Ifネストは行単位で追加や削除ができるから改変しやすい
条件を外したいときは先頭に ' 入れてコメントにすればいいだけだし、
動作テストで条件を変えて試したい時とかよく使う
- 45 :デフォルトの名無しさん:2009/10/03(土) 11:18:50
- And使うのは俺的にはIfのネストより不細工だと思うけど、人によっては綺麗だと感じる人いるみたいね。
そういえばAndじゃなくOr判定で以前、
Select Case i Mod 10
Case 1 ,6 ,7
'処理
と
j = i Mod 10
If j = 1 Or j = 6 Or j =7 Then
'処理
この二者の比較で後者が速いというやついたのでかみついたことがあるが、その後Core 2 Duoのパソコンで試したら
たしかに彼が言うように条件が3個のときはOrが速かった。
ただし条件が4個以上は短絡評価のSelect Caseが速いようだけど。
一昔前のパソコンなら条件が3個でもSelect Caseが速いんだけどな。
- 46 :デフォルトの名無しさん:2009/10/03(土) 11:38:11
- >>45
どのくら速かった?
- 47 :デフォルトの名無しさん:2009/10/03(土) 12:28:15
- ま〜た、速度厨か
- 48 :デフォルトの名無しさん:2009/10/03(土) 12:53:42
- ショートサーキットがあればねぇ。
あとVBAって、右辺だけの演算子結合出来ないよね?確か。
if a=1 or a=2 or a=3 then
だよね、確か。
if a=1 or 2 or 3 then
でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。
- 49 :デフォルトの名無しさん:2009/10/03(土) 13:54:45
- 馬鹿?
- 50 :デフォルトの名無しさん:2009/10/03(土) 14:48:26
- Sub MonthChk(Month as Integer)
If 0 < Month <=12 then
Debug.Print Month
Else
Debug.Print False
End If
End Sub
- 51 :デフォルトの名無しさん:2009/10/03(土) 16:41:50
- >>48
>if a=1 or 2 or 3 then
>でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。
本当にエラー吐いたの?、その条件だとa=1が真でも偽でも2と3が真だから
必ず真になってエラーにはならないと思うけど・・・
- 52 :デフォルトの名無しさん:2009/10/03(土) 17:46:54
- 文法くらい作法に従って書けよ
それで動くと思ってるのは他の言語も経験したことないんだろ?
クラス継承ができないとか、ポインタ使えないとか範囲コメントできないとかならともかく・・・
- 53 :デフォルトの名無しさん:2009/10/03(土) 19:57:28
- いや、コード書いてシステム動かすのが前提なんだから、ある程度速度を求めるのは当然だろう
速度厨とか何を言ってるんだ
- 54 :デフォルトの名無しさん:2009/10/03(土) 19:59:36
- VB.NETにはショートサーキットする演算子が追加されてるから、そのうちVBAにも追加されるかもしれん
個人的にはショートサーキットの有無で結果の変わるようなコーディングは避けるべきだと思う
>>51
俺は>48ではないが
昔のVBAだと確かエラーになってた気がするんだが
今エクセルの2007で試したらエラーにならないな
まあ、>48が思ってる通りには評価されてないんだが
- 55 :デフォルトの名無しさん:2009/10/03(土) 21:09:02
- よろしくお願いします。この場合XLSM形式で保存する場合はどこに&”.xlsm”を書き足したらいいのですか?
If tmpSheet.Range("B" & r).Value <> tmpSheet.Range("B" & r + 1).Value Then '次のB列の値が違っていたら
book.SaveAs dataFolder & "\" & tmpSheet.Range("B" & r).Value '集計ブックを作業シートのB列の値(シート名)で保存
book.Close False '集計ブックを閉じる
isOpen = False '集計ブックが開いているかフラグを閉じているにする
End If
- 56 :デフォルトの名無しさん:2009/10/03(土) 21:47:02
- マクロの記録、がためになるよ
- 57 :デフォルトの名無しさん:2009/10/04(日) 06:15:54
- Office 2010から、VBA.netにならないんですか?
- 58 :デフォルトの名無しさん:2009/10/04(日) 06:27:10
- >>55
If tmpSheet.Range("B" & r).Value <> tmpSheet.Range("B" & r + 1).Value Then '次のB列の値が違っていたら
book.SaveAs dataFolder & "\" & tmpSheet.Range("B" & r).Value & ".xlsm", '集計ブックを作業シートのB列の値(シート名)で保存
book.Close False '集計ブックを閉じる
isOpen = False '集計ブックが開いているかフラグを閉じているにする
End If
- 59 :デフォルトの名無しさん:2009/10/04(日) 09:29:33
- XP&2003です。
フォーム上のテキストボックスの数を数えるには、
どのようにすればよいでしょうか。
Controlsの引数は"名前"と"番号"なので種類が指定できないし、
GettypeはVBAでは使えないようで悩んでいます。
- 60 :デフォルトの名無しさん:2009/10/04(日) 11:31:23
- >>59
TypeName 使ってみてはどうですか
- 61 :59:2009/10/04(日) 13:45:27
- >>60
できましたぁぁぁぁぁぁ
ありがとうございましたぁぁぁぁぁ!!!
- 62 :デフォルトの名無しさん:2009/10/04(日) 21:10:56
- こんばんは。
VBAを始めたばかりで、全然わからないので、
ここで質問させてください!!
A列に"リンゴ"と書かれたセルがあれば、
そのセルと隣のセルを切り取って、貼り付け用のセルに貼り付ける。
なければ、何もしないという構文を書きたいんです。
IF is nothingを使うのかなぁと思ったのですが、
どこに入れればいいのかわからなかったので。。。
ちなみに、貼り付け用のセルに貼り付けた後、
空白になったそのセルを切り取るっていう構文も入れて、
その時に、IFを使っています。
以下に構文を記載しますので、どうしたらいいか教えてください!
よろしくお願いいたします!!!!!
Dim myLastLow as Long
Dim i as Long
Columns(1).Find("りんご").Resize(, 2).Cut Sheets("Sheets1").Columns(1).Find("貼り付け用")
myLastLow = Range("A30").End(xlUp).Row
For i = myLastLow To 1 Step -1
If Cells(i, 1).Value = "" Then
Range("A" & i & ":B" & i).Delete shift:=xlShiftUp
End If
Next i
- 63 :デフォルトの名無しさん:2009/10/04(日) 21:26:33
- forで上から順番に判定させるのが分かりやすいと思うよ。
for i = 1 to cells(65536,1).end(xlup).row
if cells(i,1).value = "りんご" then
'コピペ処理
end if
next
- 64 :デフォルトの名無しさん:2009/10/04(日) 22:31:45
- >63さん
ありがとうございます!!
早速やってみたんですが、
「プロシージャの呼び出し、または引数が不正です」とエラーが
出てしまいました。。。
なぜでしょう。。。
Columns(1).Find("りんご")…
というところでエラーが出てるっぽいです。
- 65 :デフォルトの名無しさん:2009/10/04(日) 22:52:55
- >>62
Columns(1).Find("りんご").Resize(, 2).Cut Sheets("Sheets1").Columns(1).Find("貼り付け用")
この構文だとA列に"りんご"と記入されたセルが存在しないと実行時エラーになるよ
あとシートは指定した方がいいとおもうよ
Set A = Sheets("Sheet2").Columns(1).Find("りんご")
If Not A Is Nothing Then
Set A = A.Resize(, 2)
A.Cut Sheets("Sheets1").Columns(1).Find("貼り付け用")
End If
上記例でも"Sheets1"のA列に"貼り付け用"と記入されたセルが存在しないと実行時エラー
になると思うけど例を参考にがんばってみてください。
あと >>64で出てるえらーって
"Sheets1"のA列に"貼り付け用"と記入されたセルが存在しないんじゃないの
- 66 :デフォルトの名無しさん:2009/10/04(日) 22:59:56
- >>65
解決しました!!65さんの言っているとおりでした!
すいません。私が書いてなかったのが悪かったんですが、
"貼り付け用"というセルは表の一番下にあるんです。
一度"りんご"のセルがあって、実行されちゃうと、
もう"貼り付け用"というセルがなくなってしまうことが原因でした!
なので、Forを一番下から上にあがるような構文を書いたら
エラーが出なくなりました!
ありがとうございました!!
- 67 :デフォルトの名無しさん:2009/10/04(日) 23:15:00
- 62です。
もう一つ教えてもらってもいいですか?
もし"りんご"というセルがなかったら、
"貼り付け用"と書かれたセルとその隣のセルを削除したいのですが、
どのように書けばいいですか?
elseを使うんだろうなぁと思って、
Else
Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp
を入れてみたんですが、エラーになっちゃいました。。。
お時間があれば教えてください!よろしくお願いします。
- 68 :デフォルトの名無しさん:2009/10/04(日) 23:19:19
- あとは自力で頑張れよ・・・
- 69 :デフォルトの名無しさん:2009/10/05(月) 00:11:51
- そんなこといわずにもう一息っ!
- 70 :デフォルトの名無しさん:2009/10/05(月) 00:19:37
- 俺はfindの時にはsetを使ってるんだけど、説明するのも大変そうだなぁ・・・。
見つかりませんってエラーが出るんだから、on error goto で飛ばしたら?
- 71 :デフォルトの名無しさん:2009/10/05(月) 00:56:27
- >>67
> Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp
上の1行だけ試しに実行させたら正常に動いたので、
If〜Else〜End Ifの構文が正しく書けていない気がします。下はサンプル。
Set A = Sheets("Sheet1").Columns(1).Find("りんご")
Set B = Sheets("Sheet1").Columns(1).Find("貼り付け用")
'-- 「B is Nothing」な場合の処理は割愛
If A Is Nothing Then
B.Resize(, 2).Delete shift:=xlShiftUp
Else
Set A = A.Resize(, 2)
A.Cut B
End If
- 72 :デフォルトの名無しさん:2009/10/05(月) 01:10:09
- >>54
エクセル97で試したけどエラーにならないな
VBなら言語仕様的にはエラーになどならないはずだがな、間違った演算してるわけじゃないしな
a=1が真の場合は分り易く8ビットで表現すると11111111となる
次に11111111と00000010(十進数の2)をor演算すると11111111となる、
次に11111111と00000011(十進数の3)をor演算すると11111111となり、
すべて演算した結果は真となり、エラーにはならない
a=1が偽の場合は分り易く8ビットで表現すると00000000となる
次に00000000と00000010(十進数の2)をor演算すると00000010となる、
次に00000010と00000011(十進数の3)をor演算すると00000011となり、
すべて演算した結果は真となり、エラーにはならない
よってif a=1 or 2 or 3 thenの条件式は必ず真になるでしょ
- 73 :デフォルトの名無しさん:2009/10/05(月) 01:26:21
- 最初の設計がだめなんじゃないの?
りんごが無かったら削除するんじゃなくて
りんごがあったら追加する仕様の方がいい希ガス
- 74 :デフォルトの名無しさん:2009/10/05(月) 01:30:23
- ?a=1 or 2 or 3
3
3と計算されるね
- 75 :デフォルトの名無しさん:2009/10/05(月) 02:06:50
- え?
- 76 :デフォルトの名無しさん:2009/10/05(月) 03:18:19
- λ
- 77 :デフォルトの名無しさん:2009/10/05(月) 11:59:57
- >>74
Dim a
a = 1
MsgBox a = 1 Or 2 Or 3
これ、たしか最初は3になったはずだが、今は-1にしかならん。
おれの記憶違いかな?
それにしても
MsgBox 1 Or 2 Or 3 Or 4
これが7になるのはどうして?
- 78 :77:2009/10/05(月) 12:04:44
- 自己レスだが7になる理由は分った。
- 79 :デフォルトの名無しさん:2009/10/05(月) 12:44:27
- >>36はプログラマとして優秀さを感じるな
>>38は人の程度が知れる
- 80 :デフォルトの名無しさん:2009/10/05(月) 13:11:30
- (;゚д゚)ァ
- 81 :デフォルトの名無しさん:2009/10/05(月) 14:19:24
- >>77
とりあえず And、Or、Xor は論理演算子じゃなくてビット演算子だと覚えておけ
a が 1 じゃない時
a = 1 Or 2 Or 3 ⇒ False Or 1 Or 2 Or 3 ⇒ 00000000 Or 00000001 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3
a が 1 の時
a = 1 Or 2 Or 3 ⇒ True Or 1 Or 2 Or 3 ⇒ 11111111 Or 00000001 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1
1 Or 2 Or 3 Or 4 ⇒ 00000001 Or 00000010 Or 00000011 Or 00000100 ⇒ 00000111 ⇒ 7
- 82 :デフォルトの名無しさん:2009/10/05(月) 16:16:05
- >>81
>>78書いた時点で分ってるよ。
- 83 :デフォルトの名無しさん:2009/10/05(月) 16:39:52
- >>81
a が 1 じゃない時
×a = 1 Or 2 Or 3 ⇒ False Or 1 Or 2 Or 3 ⇒ 00000000 Or 00000001 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3
○a = 1 Or 2 Or 3 ⇒ False Or 2 Or 3 ⇒ 00000000 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3
a が 1 の時
×a = 1 Or 2 Or 3 ⇒ True Or 1 Or 2 Or 3 ⇒ 11111111 Or 00000001 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1
○a = 1 Or 2 Or 3 ⇒ True Or 2 Or 3 ⇒ 11111111 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1
=演算子はOr演算子よりも優先順位が高いのでa = 1が演算されたあとにOrの演算が行われる
- 84 :デフォルトの名無しさん:2009/10/05(月) 17:23:56
- >>81
こまったことに2007のエクセルのヘルプには論理演算子と書いてあるんだがな
実際は論理演算も算術演算も区別がない。全部算術演算してる
問題の本質は、算術演算か論理演算かじゃなくて、型の優先順位の問題
Orで型が一致しない場合、booleanより他の型の方が優先順位が高い
おそらくこの式ならIntegerで値が帰っている
もしbooleanの方が優先順位が高ければ、2と3がbooleanに変換されるので
a = 1 Or 2 Or 3 ⇒ a = 1 Or True Or True ⇒ True
True=-1なので、常に-1が帰るはず
型がいい加減な言語の弊害だな
- 85 :デフォルトの名無しさん:2009/10/05(月) 17:45:45
- ビット演算の便利な使い方のケースってどんなものある?
- 86 :デフォルトの名無しさん:2009/10/05(月) 17:52:54
- >>85
一般論で言えばBoolean型の配列よりはビット演算の方がメモリが節約できてキャッシュの使用効率が上がるし
条件判断も高速になる。
可読性は落ちるけど昔からよく使われる手法だから、知ってないと人のソースが読めなかったりする。
- 87 :デフォルトの名無しさん:2009/10/05(月) 19:49:26
- vbsの質問ってここでいいですか?
- 88 :デフォルトの名無しさん:2009/10/05(月) 20:24:16
- vbaから呼ぶならある程度は良いと思うけど。個人的に。
- 89 :デフォルトの名無しさん:2009/10/05(月) 20:31:15
- vbaとあまり関係ないので別スレで質問してみます
- 90 :デフォルトの名無しさん:2009/10/05(月) 20:31:50
- >まぁ今時はコンパイラが大分やってくれるから高級言語ならあまり関係ないけど
組込とかで機械語表記するときゃ今でも普通に使うよ
ハードに近づけば近づくほど限界性能を引き出せるけど分かりにくくなる
とりあえずVBAって時点で、変な表記はせずに可読性に特化したコードを書くべきだと思う
- 91 :デフォルトの名無しさん:2009/10/05(月) 20:38:55
- 速度厨はその辺が気に食わないみたいで
- 92 :デフォルトの名無しさん:2009/10/05(月) 20:43:24
- VBAに速度求めてもな。
手作業の自動化くらいに使ってりゃいいんだよ。自分でやるより早いだろ。
- 93 :デフォルトの名無しさん:2009/10/05(月) 21:02:07
- >>85
ハード叩くときの設定なんかで使う
#ドライバー作る時なんかに必要なときがある(あまりいないと思うけど)
- 94 :デフォルトの名無しさん:2009/10/05(月) 21:19:46
- VBAでドライバ作るやつはいないだろ
VBAでビット演算を使って便利なケースを語れ
- 95 :デフォルトの名無しさん:2009/10/05(月) 21:23:14
- ビット演算の宿題が出たとき
- 96 :デフォルトの名無しさん:2009/10/05(月) 21:35:17
- >>94
フォームやシート上にcheckboxが多数ある場合のON/OFF判定とかは?
- 97 :デフォルトの名無しさん:2009/10/06(火) 02:16:02
- それにしても SQL に bit 演算ないのは理不尽だよなぁ
- 98 :デフォルトの名無しさん:2009/10/06(火) 02:24:59
- んなこたない
- 99 :デフォルトの名無しさん:2009/10/06(火) 02:40:06
- あるの?
- 100 :デフォルトの名無しさん:2009/10/06(火) 06:53:07
- 奇数かどうかを判定するのにビット演算使ってみたが12%しか速くならんね。
If i Mod 2 = 1 Then
と
If i And 1 Then
偶数かどうかを比較したらビット演算が45%速かった。
If i Mod 2 = 0 Then
と
If i And 0 Then
- 101 :100:2009/10/06(火) 06:58:23
- すまん、偶数かどうかの比較はまちがってるな。
- 102 :デフォルトの名無しさん:2009/10/06(火) 07:11:08
- ちなみに偶数かどうかは
If j And 1 = 0 Then
- 103 :デフォルトの名無しさん:2009/10/06(火) 07:34:47
- If not (i And 1) Then
- 104 :デフォルトの名無しさん:2009/10/06(火) 07:50:32
- >>103
それも書こうと思ったが、たしかにその方が少し速いね。
- 105 :デフォルトの名無しさん:2009/10/06(火) 07:51:33
- 背伸びしてビット演算するレベルじゃないな。
- 106 :デフォルトの名無しさん:2009/10/06(火) 07:54:49
- ループの回数を多くして計りなおしたら>>102の方が速かったわ。
- 107 :デフォルトの名無しさん:2009/10/06(火) 07:56:12
- その程度は普通はMod使うよなぁ。
- 108 :デフォルトの名無しさん:2009/10/06(火) 08:02:23
- WorksheetFunction.IsEvenを使う俺様は最強
じゃねーな。最低だ。
- 109 :デフォルトの名無しさん:2009/10/06(火) 08:15:34
- >>108
よく見る似たような最低なものにWorksheetFunction.IsNumberがある。
他にもあったな。
- 110 :デフォルトの名無しさん:2009/10/06(火) 08:29:22
- 質問スレがヲタスレ化してる・・・
- 111 :デフォルトの名無しさん:2009/10/06(火) 09:39:21
- 速度厨はアセンブラでもやっとけ、アフォ
- 112 :デフォルトの名無しさん:2009/10/06(火) 09:42:03
- >>100
奇数の判定はこれでいいんじゃないか?
If i Mod 2 Then
- 113 :デフォルトの名無しさん:2009/10/06(火) 09:45:17
- 俺は速度をことさら求めない派だが、やたら速度を否定するやつのソースって汚いのが多いよな。
- 114 :デフォルトの名無しさん:2009/10/06(火) 09:51:38
- >>112
普通はModだが、Andでビット演算で判定すればほんの少し速くなるって話だろ?
- 115 :デフォルトの名無しさん:2009/10/06(火) 09:59:37
- >>113
お前の美しいソースを見てみたいもんだな。
- 116 :デフォルトの名無しさん:2009/10/06(火) 10:07:27
- こんにちは。あたしはカウガール。
AAとして成り上がるため、スレを巡る旅をしています。
__
ヽ|__|ノ モォ
||‘‐‘||レ _)_, ―‐ 、
/(Y (ヽ_ /・ ヽ  ̄ヽ
∠_ゝ ` ^ヽ ノ.::::::__( ノヽ
_/ヽ /ヽ ̄ ̄/ヽ
- 117 :デフォルトの名無しさん:2009/10/06(火) 10:27:45
- >>114
いやそうじゃなくて「= 1」という比較演算が無駄じゃないかって指摘。
このおかげで遅くなってる希ガス
If i Mod 2 = 1 Then
と比較するなら
If i And 1 = 1 Then
とするべきだろうし、
If i And 1 Then
に書き方を合わせるなら
If i Mod 2 Then
と比較しないと不公平じゃないかなーって思った。それだけ。
- 118 :デフォルトの名無しさん:2009/10/06(火) 10:35:49
- >>117
たしかに公平にやるならそうだよな。
公平にやってもビット演算が少し速いみたいだけど、人に見せるコードならIf i Mod 2 = 1 Then だな。
- 119 :デフォルトの名無しさん:2009/10/06(火) 12:31:35
- おまえら仕事しろよ
- 120 :デフォルトの名無しさん:2009/10/06(火) 19:37:14
- 速度の事は別スレ建てて、そこでやれ
- 121 :デフォルトの名無しさん:2009/10/06(火) 19:50:09
- 俺はわからなかったよ!
- 122 :デフォルトの名無しさん:2009/10/07(水) 02:02:48
- お前ら、奇数ってマイナスもありなんだぜ
i Mod 2 = 1 ではマイナスの奇数が判定できない時点で失格
- 123 :デフォルトの名無しさん:2009/10/07(水) 03:32:56
- 何の問題もない
たとえば4bitなら
-1 = 1111
-2 = 1110
-3 = 1101
- 124 :デフォルトの名無しさん:2009/10/07(水) 07:11:14
- >>123
ー3 mod 2 = 1 になった?
- 125 :デフォルトの名無しさん:2009/10/07(水) 07:24:01
- yes we can
- 126 :デフォルトの名無しさん:2009/10/07(水) 08:52:58
- >123
天然w
- 127 :デフォルトの名無しさん:2009/10/07(水) 09:11:24
- >>122
すみませんねぇ、あいにくマイナス志向じゃないもんでね。
じゃぁIf i Mod 2 <> 0 Thenならあなたのおきにメスでしょうか?
- 128 :デフォルトの名無しさん:2009/10/07(水) 09:27:47
- ド素人にはよくあることw
- 129 :デフォルトの名無しさん:2009/10/07(水) 09:50:25
- ちなみに
If i Mod 2 Then
なら負数でも問題ないんだが
- 130 :デフォルトの名無しさん:2009/10/07(水) 10:48:04
- ー3 mod 2 = 1
が偽になる環境って
ー(3 mod 2) = -1
と解釈されてるんだろ
((ー3) mod 2) = 1
と書けば問題無し
- 131 :デフォルトの名無しさん:2009/10/07(水) 11:08:36
- >130
天然w
- 132 :デフォルトの名無しさん:2009/10/07(水) 11:17:12
- Modで盛り上がってるところすみませんが、四捨五入ってVBAに関数ある?
Roundは微妙に違うし。
- 133 :デフォルトの名無しさん:2009/10/07(水) 11:24:05
- >>132
ない
数式を工夫したり、関数を自作する必要がある
またはWorksheetFunction.Round
- 134 :デフォルトの名無しさん:2009/10/07(水) 11:26:43
- >>130
キミはまず、とりあえずマイナス記号を入力する方法から勉強しようか
- 135 :デフォルトの名無しさん:2009/10/07(水) 11:27:20
- は-い(;゚д゚)ァ
- 136 :デフォルトの名無しさん:2009/10/07(水) 13:37:07
- >>133
一応VBAにもRoundって関数がある
まあ、これ使うと思わぬ結果が出ることもある
自作するなら、基本的には0.5足して切り捨てなんだが
これもマイナスのときどうするか考えると結構じゃまくさい
- 137 :デフォルトの名無しさん:2009/10/07(水) 14:13:01
- floor
- 138 :デフォルトの名無しさん:2009/10/07(水) 15:44:12
- >>136
ちゃんと最初から読みなさい
質問者はVBAのRoundではだめなことがわかった上で、どうすればいいか質問してる
VBAのRound関数とワークシート関数のROUNDは機能が異なるのは既知
- 139 :デフォルトの名無しさん:2009/10/07(水) 16:17:08
- VBAのRoundも立派な四捨五入ですが。
- 140 :デフォルトの名無しさん:2009/10/07(水) 16:50:28
- ttp://q.hatena.ne.jp/1154589462
を参考に、ExcelでSELECTを使えるようにしたのですが、うまくいきません。
データベースのテーブルの見出しを変更すると、きちんとした値を返しません。
デフォルトのIDとNAMEでは正常に値を取得できます。
具体的には、
Sheet2を以下のようにして、
| A | B
1 | ID | CATEGORY1
2 | 1 | a
3 | 2 | b
4 | 3 | c
Sheet1のA1に「3」を入れ、
A2に「=execsql("select CATEGORY1 from [Sheet2$] where ID = "&A1」と入力。
A2には値のエラーが返される。
どのあたりが問題でしょうか。
OS:WindowsXP
Excel ver:2003 (11.8307.8221)
- 141 :デフォルトの名無しさん:2009/10/07(水) 17:15:52
- ExecSQL = rs("NAME").Value
これを変更した?
- 142 :デフォルトの名無しさん:2009/10/07(水) 17:19:59
- >141
見落としていました。
ありがとうございます。
- 143 :デフォルトの名無しさん:2009/10/07(水) 18:14:31
- エクセルで指定セル内に文字を入力中、別のセル内にリアルタイムに
バイト数を表示させることはできるのでしょうか。
教えてください、エロい人。
- 144 :デフォルトの名無しさん:2009/10/07(水) 18:25:56
- >>143
無理
- 145 :デフォルトの名無しさん:2009/10/07(水) 18:41:44
- すみません。
すごく初歩的なことなんですが、
列が縦でrow、行が横でcolumですよね?
A5だとAが列で5が行ってことになりますよね?
A5セルからA10セルまでをループさせたいときに、
5や10の値の定数をrowみたいな名前で宣言してるのを見たんですが、
これってcolumじゃないんですか??
書籍なので間違いではなさそうなんですが・・・。
A列B列、C列・・・
5行、6行・・・
ですよね?
- 146 :デフォルトの名無しさん:2009/10/07(水) 18:50:02
- rowが行、colum列
辞書で調べてみ
- 147 :デフォルトの名無しさん:2009/10/07(水) 19:12:00
- >>139
違うんじゃねーの?
5は捨てたり入れたりだもんな。
Round(1.5)もRound(2.5)も同じだろ?
- 148 :デフォルトの名無しさん:2009/10/07(水) 19:29:34
- >>145
>>146の方の回答が全てだと思いますが、
下のExcel関数をいくつかのセルで試してみれば、理解しやすいかもしれません。
【関数】
=ROW() :この関数が入力されている行の行番号を調べます。
=COLUMN() :この関数が入力されている列の列番号を調べます。
- 149 :デフォルトの名無しさん:2009/10/07(水) 19:31:05
- いやでき・・・どうだろ
ループでバインドするなりキーイベントで捕捉するなり
フォームのTxtボックスとかなら普通に出来るけど、k
セル入力中ってどうだっけ
- 150 :デフォルトの名無しさん:2009/10/07(水) 20:49:33
- Excel2007
正しい言い方が判らないので上手い事伝わるかどうか…なんですけど。
フォーム上にコマンドボタンを縦に5つ貼りつけています。
エンターキーを叩いた時、初期状態では一番上のボタンのマクロが実行され
ますが、これを3番目のボタンのマクロが実行される様に変えたいです。
テキストボックスとかだったらタブオーダーを設定すれば順番を指定できま
すけど、コマンドボタンについて同一フォーム上で最優先のものを指定する
事出来ますか?
- 151 :デフォルトの名無しさん:2009/10/07(水) 20:51:48
- >>149
セルはテキストボックスか何かを継承してるはずなんで、
ハンドルさえ取得できればなんとかなる可能性はあるけど、
かなり大変じゃないかと思う。
それにバージョンごとに方法が違ってくると思う。
たぶんだけど2007が一番やりやすそうな気がする。
入力途中のキーイベントはVBAには存在しないので
自前でフックする必要がある。
- 152 :デフォルトの名無しさん:2009/10/07(水) 20:54:47
- >>150
コマンドボタンにもタブオーダーはあるよ
- 153 :デフォルトの名無しさん:2009/10/07(水) 20:58:42
- >>145
A1セルの場合
A=横=列=Column
1=縦=行=Row
- 154 :150:2009/10/07(水) 21:12:30
- >>152
プロパティのTabIndexをいじってみたら希望道理になりました。
どうもお騒がせしました m(_ _)m
- 155 :デフォルトの名無しさん:2009/10/07(水) 23:40:36
- 西暦(2000年以降)年を入力したとき、その1年間の祝日の祝日名、月日及び曜日をイミディエイトウインドウに
表示するプログラムで、サブルーチンプロシージャまたは関数プロシージャを3つ利用しなくてはなりません。
ひたすらサイトを検索したのですが、見つかりませんでした。
全く手が出せず、困っています。どなたか教えてください。よろしくお願いします。
- 156 :デフォルトの名無しさん:2009/10/08(木) 00:06:09
- 155です。
Excel2007を使用しています。
- 157 :デフォルトの名無しさん:2009/10/08(木) 00:28:45
- >>155
検索すると結構、マクロ、祝日関数あるよね
ダウンロードしてそのソースをみて
考えればいんじゃない
解説してるサイトもあった気がする
- 158 :デフォルトの名無しさん:2009/10/08(木) 00:32:56
- 155です。ありがとうございます。
祝日判定や、日にちを入れて表示させるものは
見つかったのですが、祝日名を表示させるものは
ひとつしか見つからず、ダウンロードしても
マクロは見られませんでした…
- 159 :デフォルトの名無しさん:2009/10/08(木) 00:38:20
- >>155
祝日名を表示させるコードの一例が載っています。
ttp://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA
- 160 :デフォルトの名無しさん:2009/10/08(木) 00:45:27
- 先ほど参照していたのですが、
kt関数は使ったことがなく、わかりませんでした…。
- 161 :デフォルトの名無しさん:2009/10/08(木) 01:36:09
- >>155
質問の意図がちょっとわからんな。
そういう関数を作れっていう宿題なのか、どこかから手に入れたマクロの使い方を知りたいのか。
ちなみにkt関数は肝心の部分がプロテクトかかってて見えないんじゃなかったっけ?
- 162 :デフォルトの名無しさん:2009/10/08(木) 13:09:35
- 全くの初心者の質問なのですが、
ttp://www.matsumae.hokkaido-c.ed.jp/02school/kyouka_01.pdf
このサイトにある例13の問題の、
ex13 上の例13のプログラムを参考にして,自然数Nを入力したとき,
Nの約数の個数を求めるプログラムを,次の手順で作れ。
変数sを準備し,N以下の自然数で割り切れたとき,sに1を加える。
これのやり方が全くわかりません。
どなたか簡単に教えてくれないでしょうか。
- 163 :デフォルトの名無しさん:2009/10/08(木) 13:45:39
- >>162
宿題スレにいけ。ぼけ。
Sub test()
Dim inputNum As Integer
Dim count As Integer
Dim divNums As Integer
inputNum = InputBox("整数入力してね")
For count = 1 To inputNum
If inputNum Mod count = 0 Then
divNums = divNums + 1
End If
Next
Debug.Print divNums
End Sub
ちなみにサンプル例が間違えてるからなw
松前高等学校のプログラム担当の先生に言っといて。
- 164 :デフォルトの名無しさん:2009/10/08(木) 14:11:18
- >>163
ありがとうございます。
- 165 :デフォルトの名無しさん:2009/10/08(木) 15:16:46
- これか
http://pc12.2ch.net/test/read.cgi/tech/1200989025/115-
- 166 :デフォルトの名無しさん:2009/10/08(木) 16:01:04
- >>143
入力したキーのフックに使えるAPI関数があるにはある
SetWindowsHookEx
恒常ループを設定して
多分出来ないんだろうが
- 167 :デフォルトの名無しさん:2009/10/08(木) 16:13:28
- >>多分出来ないんだろうが
何しに出てきたんだwww
- 168 :デフォルトの名無しさん:2009/10/08(木) 17:13:36
- >>167
キー入力のバインドは出来るんだろうが、他のセルに書きながら元セルのアクティブどうするかとか、全角や変換どうするんだとか考えたら難しいかなあと
キー入力関係なく、一定時間ごとにセル内容を参照してってのも、入力を確定してないから無理だろうし
セル入力中のデータを捕捉出来れば或いは
- 169 :デフォルトの名無しさん:2009/10/08(木) 18:17:21
- 155です。
学校で授業でやっていて、「テストまでには出来るようにしておけ」
といわれています。
サブルーチンもまだ1度しか使ったことがなく、
マクロを見て理解するのが精一杯の状態です。
- 170 :デフォルトの名無しさん:2009/10/08(木) 18:39:53
- 課題には剥かないよな
休日と振替は法律で決まってるからアルゴリズムまるぱく出来るが、最近は数年で法律改正されてる
- 171 :デフォルトの名無しさん:2009/10/08(木) 19:36:09
- 頭のおかしな人には気をつけましょう
http://info.2ch.net/before.html
- 172 :デフォルトの名無しさん:2009/10/08(木) 19:40:37
- なんだ突然
- 173 :デフォルトの名無しさん:2009/10/08(木) 19:49:36
- Excel2002で3D積み上げ棒グラフを作る方法を教えてください。
ttp://terrapy.sakura.ne.jp/image/3DStackedColumn.gif
- 174 :デフォルトの名無しさん:2009/10/08(木) 20:14:32
- >>169
カレンダー関連の処理は簡単に見えて実はかなり難しい。
はっきり言って初心者には無理。
> プロシージャを3つ利用しなくてはなりません。
てのがひっかかるんだけど、
学校が用意したサブルーチンがあって、それを呼び出せって話じゃないの?
- 175 :デフォルトの名無しさん:2009/10/08(木) 23:37:56
- サブルーチンも別マクロで自分で作らなければなりません…
- 176 :デフォルトの名無しさん:2009/10/08(木) 23:46:19
- >>175
自分も初心者には少し荷が重い気がするけど
一度に全てやろうとするよりも
一つずつ片付けた方が良いとおもうよ
祝日に関しては内閣府ページ
http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
が参考になると思うんで
どのような処理が必要かまず検討してみたら?
テーブルに1年分(1/1〜12/31)のデータ作成して
それに祝日データを入れていく方法が一番分かり易いんじゃないかな
振替休日の判定とか
休日 平日 休日 → 休日 休日 休日 とする処理とかあるし
- 177 :デフォルトの名無しさん:2009/10/09(金) 00:07:41
- 西暦年を入力→1/1の曜日を求める→出力「元日 1月1日 ○曜日」
→1月第二月曜の日を求める→出力「成人の日 1月○日 月曜日」
…の繰り返しをする、ということしか…
さまざまなサイトに出ている「春分秋分」については、月日は「春分日」「秋分日」、
曜日は「未定」と表示すればよいのですが…
- 178 :デフォルトの名無しさん:2009/10/09(金) 00:23:56
- 2012以上の数字が入力されたら「その年の祝日はまだ決定していません」と表示するのが正解
- 179 :デフォルトの名無しさん:2009/10/09(金) 00:26:24
- 祝日法は数年ごとに改定されてるから、計算で求めようとしてもプログラムが長くなるだけ。
ワークシートか配列に50年分の一覧表を入れておいて、それを表示するだけの方がよっぽどコンパクトで正確。
- 180 :デフォルトの名無しさん:2009/10/09(金) 00:36:00
- 日付が決まっている祝日
第二月曜日など動く祝日
祝日と祝日の間、振替休日
の三つに別けてやるのがこの宿題の正解だな
- 181 :デフォルトの名無しさん:2009/10/09(金) 00:37:28
- 元日 1月1日
成人の日 1月の第2月曜日
建国記念の日 2月11日
春分の日 春分日
昭和の日 4月29日
憲法記念日 5月3日
みどりの日 5月4日
こどもの日 5月5日
海の日 7月の第3月曜日
敬老の日 9月の第3月曜日
秋分の日 秋分日
体育の日 10月の第2月曜日
文化の日 11月3日
勤労感謝の日 11月23日
天皇誕生日 12月23日
について表示できれば良く、改定については考慮しません。
- 182 :デフォルトの名無しさん:2009/10/09(金) 00:39:57
- 祝日を表示したいので、振替休日についても考慮しません。
- 183 :デフォルトの名無しさん:2009/10/09(金) 01:13:42
- かなり楽に成っちゃったね
ならば、日付が決まっている祝日
第二月曜日、第三月曜の祝日
秋分春分の三つに分けるのが正解かな
- 184 :デフォルトの名無しさん:2009/10/09(金) 01:50:01
- というか
後出し過ぎ
- 185 :デフォルトの名無しさん:2009/10/09(金) 02:38:24
- 会社の創立記念日とか
- 186 :デフォルトの名無しさん:2009/10/09(金) 08:24:30
- ム板だよな?ここ・・・
- 187 :デフォルトの名無しさん:2009/10/09(金) 08:52:50
- そっか今みどりの日だから祝日扱いなんだな
- 188 :デフォルトの名無しさん:2009/10/09(金) 21:28:17
- 質問をさせて下さい。スペックは
Windows2000
Excel2000
です。
シート1に
名前 日付 数 名前 日付 数 ・・・
A氏 10/1 12 E氏 10/3 10
B氏 10/1 11 F氏 10/2 10
C氏 10/2 10 G氏 10/4 11
D氏 10/3 10
のような感じでデータが横に長く入力されているのですが、
これをシート2に一括のデータとしてまとめたいです。
名前には重複はありません。日付のみ重複しています。
申し訳ありませんが、よろしくお願いします。
- 189 :デフォルトの名無しさん:2009/10/09(金) 21:30:51
- >>188に補足です
シート2は
名前 日付 数
A氏 10/1 12
B氏 10/1 11
C氏 10/2 10
D氏 10/3 10
E氏 10/3 10
F氏 10/2 10
G氏 10/4 11
・
・
・
の形にしたいです。
- 190 :デフォルトの名無しさん:2009/10/09(金) 21:41:35
- >>188-189
配列に入れたら簡単だよ。
それくらい人に頼らず自分で作れないとダメでしょ。
- 191 :デフォルトの名無しさん:2009/10/09(金) 21:52:53
- 配列にいれんでも
名前には重複がないんだったら
そのままシート2へコピーすればいいだけてしょ
1)A氏〜D氏までのセルをコピー
2)その下にE氏〜G氏までのセルをコピー
てな感じで ループ処理していけば
- 192 :デフォルトの名無しさん:2009/10/09(金) 22:07:04
- >>188
もうちょっと具体的に。
シート1は縦4列?
- 193 :デフォルトの名無しさん:2009/10/09(金) 22:11:29
- つか 丸投げな匂いがするのは気のせい?
- 194 :188:2009/10/09(金) 22:28:11
- 名前と日付と数でひとつのブロックになっていて、それが横に数十連なっています。
今までは手作業でコピーと貼り付けをしていたのですが
数が膨大になってきたので手作業ではまかなえなくなってしまいました。
とりあえず自分でマクロを組んでみたのですが、ブロックごとの数がまちまちで
シート2の一括データに空白が出来て穴あきデータになっていしまいます・・・
- 195 :デフォルトの名無しさん:2009/10/09(金) 22:41:20
- >>155
希望に沿うか分からないですけど、作ってみました。
ttp://excelerthanexcel.blog103.fc2.com/blog-entry-1.html
3つのプロシージャをどう作るかを下の2択で迷い、後者にしました。
・ 祝日の性質別(固定日、第n月曜日、秋分春分)
・ 機能別(日付確定、曜日確定、1行出力)
よかったら参考にしてください。
- 196 :デフォルトの名無しさん:2009/10/09(金) 22:57:49
- >>194
デキタヨー
Sub a()
Set S1 = Sheets("シート1")
Set S2 = Sheets("シート2")
With S1
R_max = .UsedRange.Rows.Count
C_max = .UsedRange.Columns.Count
R_dest = 2
For c = 1 To C_max Step 3
For r = 2 To R_max
If .Cells(r, c) <> "" Then
S2.Cells(R_dest, 1) = .Cells(r, c)
S2.Cells(R_dest, 2) = .Cells(r, c + 1)
S2.Cells(R_dest, 3) = .Cells(r, c + 2)
R_dest = R_dest + 1
End If
Next
Next
End With
End Sub
- 197 :デフォルトの名無しさん:2009/10/09(金) 23:08:29
- またコイツか・・・
何でわざわざSetするの?
- 198 :デフォルトの名無しさん:2009/10/09(金) 23:11:46
- >>195
本当にありがとうございます。助かります。
イミディエイトウインドウが表示されないです…
「春分秋分」については、月日は「春分日」「秋分日」、 曜日は「未定」
と表示すればよいのですが、その場合はどうすればよいか
教えていただきたいです。
- 199 :デフォルトの名無しさん:2009/10/09(金) 23:14:50
- 変数の宣言しないと分かりにくいかもねぇ。
- 200 :デフォルトの名無しさん:2009/10/09(金) 23:28:12
- 198です。
イミディエイトウィンドウは表示されました。すみません。
- 201 :デフォルトの名無しさん:2009/10/09(金) 23:29:33
- >>197
あとから修正する可能性のある部分を先頭にまとめてるだけだよ
- 202 :デフォルトの名無しさん:2009/10/09(金) 23:38:16
- >>198
>学校で授業でやっていて、「テストまでには出来るようにしておけ」
じゃなかった?
あんまり人まかせだと テストで 赤点てな事になるよ!
- 203 :195:2009/10/10(土) 00:03:23
- >>198
自己解決したとはいえ、イミディエイトウィンドウぐらいは質問せずに自分で開きましょう。
ブログ内のコードをぐだぐだに編集して、結果だけは希望通りに出るようにしました。
質を下げたもので良ければ利用してください。
プログラム板にしては非常にぬるま湯的な対応をしてしまったことを
すごく後悔しています。でもまぁ、自分自身の勉強にはなったか。
- 204 :デフォルトの名無しさん:2009/10/10(土) 00:17:17
- >>196
ちゃんと内容は見ていないがSet □ = Nothing をする癖をつけた方がいいと思うよ。
- 205 :デフォルトの名無しさん:2009/10/10(土) 00:51:40
- >>203
ありがとうございました。
- 206 :デフォルトの名無しさん:2009/10/10(土) 01:10:37
- >>204
ローカル変数って、たとえオブジェクト型でもモジュールの出口で自動的に開放されるんじゃないの?
- 207 :デフォルトの名無しさん:2009/10/10(土) 03:57:40
- 礼儀だよ。
- 208 :デフォルトの名無しさん:2009/10/10(土) 04:17:30
- モジュールが無事終了するとは限らないだろ
- 209 :デフォルトの名無しさん:2009/10/10(土) 05:39:19
- >>204
いらないよ。
>>207
何の礼儀だよ?
>>208
だから?
- 210 :デフォルトの名無しさん:2009/10/10(土) 06:03:58
- ↑こいつ最高にアホw
- 211 :デフォルトの名無しさん:2009/10/10(土) 07:23:40
- ↓こいつ最高に天才www
- 212 :デフォルトの名無しさん:2009/10/10(土) 10:05:40
- ∩――、
/(゚)丶_ 丶
/ (● (゚)|つ
| (入_ノ ミ
| (_/ ノ
\___ノ゙ー-、
/\ _ \
(⌒O /\ (_ノ
\ノ / 、 )0
- 213 :188:2009/10/10(土) 10:16:15
- >>196
テストしてみたところ問題なく動きました。
本当にありがとうございます。
- 214 :デフォルトの名無しさん:2009/10/10(土) 10:51:27
- >>210
羮に懲りて膾を吹く。
アプリ終了前にfreeしまくるがごとし。
- 215 :デフォルトの名無しさん:2009/10/10(土) 12:23:40
- >>197
>>196を擁護すればSetした方が速いんだよ。
まぁCellsは遅いから、速くしたければ配列だろうけどね。
それからわざわざシート参照の変数をSet 変数 = Nothingとする必要はねーよ。
そんなこと気にするやつは、他にもっと気にすべきことが抜けてる場合がほとんどだ。
- 216 :デフォルトの名無しさん:2009/10/10(土) 12:55:55
- >>196の
>S2.Cells(R_dest, 1) = .Cells(r, c)
>S2.Cells(R_dest, 2) = .Cells(r, c + 1)
>S2.Cells(R_dest, 3) = .Cells(r, c + 2)
この部分は
S2.Cells(R_dest, 1).Resize(,3).Value= .Cells(r, c).Resize(,3).Value
と1行で書けそうだな。
- 217 :デフォルトの名無しさん:2009/10/10(土) 13:10:30
- オブジェクトがデカいと
メモリが少ないようなマシンで
set=nothingしないとその後辛くないかな
何もないなら必要ないだろうけど。
試して言っている訳ではないです。
- 218 :デフォルトの名無しさん:2009/10/10(土) 16:16:35
- プログラマはsetした後nothingしないなんていわない
- 219 :デフォルトの名無しさん:2009/10/10(土) 19:06:03
- >>217
Worksheet型のオブジェクト変数はシートを作ってるわけじゃない。
ワークシートへの参照への参照だ。
メモリは32ビットCPUで4バイトだ。
マクロが終了すりゃちゃんと参照カウンタは0になる。
Set ** = Nothingを書くのを否定はしないが、書くのがあたりまえって意見は否定する。
- 220 :デフォルトの名無しさん:2009/10/10(土) 20:02:13
- 書くことを習慣づけろ
- 221 :デフォルトの名無しさん:2009/10/10(土) 21:15:43
- いらないものを書くやつは馬鹿じゃね?
- 222 :デフォルトの名無しさん:2009/10/10(土) 21:18:02
- これを習慣づけろっ!て言うことが
礼儀と呼ばれるんだろね
質問なんですが
他に礼儀ってどんなものが有りますか?
- 223 :デフォルトの名無しさん:2009/10/10(土) 21:19:16
- >>221
如何に記述量を増やすかがプロなんだよ。
最小限で簡潔になんてアマチュアのやること。
- 224 :デフォルトの名無しさん:2009/10/10(土) 21:22:39
- プロってすごいんだね。
- 225 :デフォルトの名無しさん:2009/10/10(土) 21:26:09
- うるさい、黙ってNothing書け!
- 226 :デフォルトの名無しさん:2009/10/10(土) 21:27:51
- なにこの流れww
- 227 :デフォルトの名無しさん:2009/10/10(土) 21:36:46
- つまり、理由も根拠もないんだが、自分のやりたいことを他人に強制したいときの
エクスキューズが「礼儀」ってことだ。
- 228 :デフォルトの名無しさん:2009/10/10(土) 21:45:54
- >>215
普通はSetした方が速いが>>196は未宣言のVariant型だから速くはならんね。
Nothing云々より変数宣言が大事だな。
- 229 :デフォルトの名無しさん:2009/10/10(土) 21:57:25
- つまりプログラムにおいて礼儀とはK&Rであると
- 230 :デフォルトの名無しさん:2009/10/10(土) 21:57:50
- で、それ百万回実行して何ms違うの?
- 231 :デフォルトの名無しさん:2009/10/10(土) 21:59:54
- >>217
関数抜けたら解放されるんじゃ?
- 232 :デフォルトの名無しさん:2009/10/10(土) 22:02:12
- >230
普通なら宣言しないほうが早い
でも場合によってはエラーが引き起こされたりメモリが足りなくなったりする
エラー処理するかどうかなんて人それぞれだし、押し付けるようなもんじゃないんじゃないん
- 233 :デフォルトの名無しさん:2009/10/10(土) 22:16:56
- Excel2007
シート上にボタンを2つ貼りつけています。
動作はブックのコピー先をどこにするかだけの違いだけです。
そこでボタンは2つで同じマクロを呼び出し、どのボタンから呼ばれたか
によって動作を変えたいのですが、そういう事出来ますか?
フォーム上のボタンであれば、
Private Sub btn_A_Click()
CopyExec A
End Sub
Private Sub btn_B_Click()
CopyExec B
End Sub
みたいにそれぞれパラメータを与えて切り替えというのが出来ると思うのですが
- 234 :デフォルトの名無しさん:2009/10/10(土) 22:33:54
- これから速度厨と礼儀厨の熾烈な戦いが始まります。
- 235 :デフォルトの名無しさん:2009/10/10(土) 22:39:35
- >>233
貼りつけているのは、CommandButtonなの?
Private Sub CommandButton1_Click()
End Sub
Private Sub CommandButton2_Click()
End Sub
てのが出来るどこれとは違うのかな?
- 236 :デフォルトの名無しさん:2009/10/10(土) 22:49:17
- 10usくらいの差なんてどうでもいいよ
- 237 :デフォルトの名無しさん:2009/10/10(土) 22:50:35
- おまえらもういいよムリしなくて
速度とかIndexとかVlookupとかピボットとかNothingとか全部ネタのクセに
わかってるからさ!
- 238 :235:2009/10/10(土) 22:53:23
- 同じマクロを呼び出したいのね
ただ
>フォーム上のボタンであれば、
以下の文面では
フォーム上でも同じマクロを呼び出してないけど
それはいいの?
- 239 :233:2009/10/10(土) 22:55:20
- >>235
そうです。CommandButtonです。
それはフォームについてVBEで書く時ではないですか?
シート上に貼りつけて、対象マクロを選択する時ってマクロの登録(N)から
マクロを選択するけど同じのを選択した時に、どのように区別がつけられるのか?
と思いまして質問しています。どうなんでしょうか。
- 240 :デフォルトの名無しさん:2009/10/10(土) 22:56:50
- >>238
あれは CopyExec というマクロに対して、パラメータとして AまたはBを与えるという意味で
書きました。判りにくくてすいません。
- 241 :デフォルトの名無しさん:2009/10/10(土) 23:01:50
- >>239
Excel2007じゃないんでなんとも言えないけれど
対象ボタンを右くりっくして
"コードの表示"をすると
シートオブジェクトのコード画面に
Private Sub CommandButton1_Click()
End Sub
とかできない?
- 242 :239:2009/10/10(土) 23:08:48
- >>241
ボタンを右クリックして出てくるメニューの一覧が
切り取り
コピー
貼りつけ
------
テキストの編集
------
グループ化
順序
------
マクロの登録
コントロールの書式設定
でコードの標示というのはここからは出来ないみたいですが
- 243 :241:2009/10/10(土) 23:12:16
- >>242
自分のExcel古いせいかメニューが違うようで
お力になれませんでした! すみません
- 244 :デフォルトの名無しさん:2009/10/10(土) 23:41:15
- >>242
VBE開いてボタン貼り付けたシートのコードの表示すればいい
- 245 :デフォルトの名無しさん:2009/10/10(土) 23:49:31
- デザインモードになってないだけじゃないの。
デザインモードにしてボタンをダブルクリックでVBEの画面になる。
- 246 :デフォルトの名無しさん:2009/10/11(日) 00:36:01
- エクセル2007で質問です。
アドインタブのユーザー 設定のツールバーのところにボタン1、ボタン2を作って、
ボタン1を押したら、ボタン1のEnabledをFalse、2をTrue
ボタン2を押したら1はTrue、2はFalseに設定したはずですが、
ボタン1を押したあと、ボタン2が押せる状態になっていません。タブを切り替えるとなぜかうまくいくんですが。
2007はこういう仕様なんでしょうか
- 247 :デフォルトの名無しさん:2009/10/11(日) 00:43:51
- またーり行こうぜ
- 248 :デフォルトの名無しさん:2009/10/11(日) 00:54:36
- タブってリボンのことか?
- 249 :デフォルトの名無しさん:2009/10/11(日) 00:59:03
- >>239
同じマクロを呼び出した場合、呼び出し元の区別はつかんだろうな
パラメータが指定できるなら そこで区別つけるしかない
あと
フォーム上でもシート上でも
クリックイベントのプロシージャは利用できる
- 250 :239:2009/10/11(日) 06:55:15
- >>249
>呼び出し元の区別はつかんだろうな
今回は同じマクロを使う事は諦めます。ありがとうございました。
- 251 :デフォルトの名無しさん:2009/10/11(日) 07:38:14
- それActiveXコントロールのボタンじゃなくて、フォームのボタンだよね。
application.callerでボタンのテキストが取得できるから、それで判断。
- 252 :デフォルトの名無しさん:2009/10/11(日) 08:04:41
- >>251
MsgBox "呼出し元 " & Application.Caller
でシート上のボタンでも呼出し元を判別する事が出来ました。ありがとう!
- 253 :デフォルトの名無しさん:2009/10/11(日) 10:45:19
- あー、まだ見てたんだ。よかったよかった。
フォームのボタンに限らず、イベントの発火元は大抵わかるようになってるんだよ。
まぁ、中にはわからにものや、任意のマクロ(イベントハンドラ)を登録できないのもあるけどね。
- 254 :デフォルトの名無しさん:2009/10/11(日) 11:46:13
- Private Sub CommandButton1_Click()
MacroA pram:=1
End Sub
Private Sub CommandButton2_Click()
MacroA pram:=2
End Sub
こういうのは駄目?
- 255 :デフォルトの名無しさん:2009/10/11(日) 12:08:38
- いや、それでいいし、実を言えばフォームのボタンの処理もそうしたほうがいいんだ。
プログラマ的な説明だと、イベントハンドラ内に直接処理を実装すると、凝集度が低くなるから。
- 256 :デフォルトの名無しさん:2009/10/11(日) 17:21:22
- >>凝集
臨床検査学以外で初めて聞いたよ。
まさか一般社会で聞く単語とは思ってもいなかった。
- 257 :デフォルトの名無しさん:2009/10/11(日) 18:01:09
- ちょっと教えてもらっていいですか?
Cellsの使い方について
このスレでも時々みかけるんですが
a = Sheets("Sheet1").Cells(1,1).Value
と
a = Sheets("Sheet1").Cells(1,1)
は結果的に両方共 A1セルの内容を変数aに代入している事になっているのだけど
前者と後者の違いってあるのですか?
本来は、前者であるべきとは思いますが
後者を使った時の弊害ってなにかあります?
- 258 :デフォルトの名無しさん:2009/10/11(日) 18:22:07
- >>257
人によってはデフォルトプロパティを中途半端に省略したソースを汚いと感じることもある。
自分一人で使うだけなら好きにすればいい。
あとは、タイピング量が数回増えるのも人によっては弊害と考えるかもしれない。
- 259 :257:2009/10/11(日) 18:37:12
- >>258
結局の所どちらでも結果は一緒なんだから
どちらを使ってもいいんですね
ソースが綺麗か汚いかはその人の主観なんだから
あまり気にしません
とは言え 自分自身のソースみて汚いと感じる事があるんで
精進しなくては
ありがとうございます
- 260 :デフォルトの名無しさん:2009/10/11(日) 20:48:33
- 凝集度と結合度
- 261 :デフォルトの名無しさん:2009/10/11(日) 23:13:40
- >>259
また荒れる原因になるかもしれないんだけど、
やっぱりデフォルトプロパティは省略すべきじゃないと思うよ。
range型に代入する時なんか、可読性云々じゃなくて、
後から見て訳が分からなくなる・・・時がある。
- 262 :デフォルトの名無しさん:2009/10/11(日) 23:36:28
- 個人的には最初は省略しないで書いた方がいいと思う。
で、覚えたら好きに書けばいいと思う。
覚えていれば省略しても、普通にも書けるが、覚えてないと普通には書けないと思うよ。
- 263 :デフォルトの名無しさん:2009/10/11(日) 23:59:39
- 者によっては、特にオブジェクトに大量にアクセスする場合など処理が冗長になることがある
原則的に省略しないほうがいいと俺も思うけど、場面場面で使い分けるべきではある
- 264 :デフォルトの名無しさん:2009/10/12(月) 00:00:30
- C#に移行したいとかVBAが.NETベースになった時の事も考えて、
デフォルトプロパティは省略しない方がいいんじゃないだろうかと言ってみる
それならとばかりにWithステートメントを多用すると、
C#で「面倒臭ぇと」ボヤく事になる罠
- 265 :デフォルトの名無しさん:2009/10/12(月) 00:09:21
- それもこれも言語の貧弱さが原因なんだよな
- 266 :デフォルトの名無しさん:2009/10/12(月) 00:13:01
- 単純ミス防止でoption explicit とか書くだろ
それと同じで曖昧な表現は極力明確にするほうが良いと思う
どこまでが曖昧な表現かは人によるw
- 267 :257:2009/10/12(月) 01:14:57
- >>261-266
みなさんありがとうこざいます
やはり省略しない方がよさそうですね
確かに単純なプログラムでは問題なくても
複雑なプログラムになるほど後で見て訳分からなくなりそうですもんね
でも
Itemプロパティぐらいは省略してもいいかなと思ってます(^^
- 268 :デフォルトの名無しさん:2009/10/12(月) 06:01:17
- セルの値が数値ならValueじゃなくValue2が普通だから、必然的にプロパティは書くことが多いな。
Itemまで書くとくどいよな。
Worksheets.Item("Sheet1")とかCells.Item(1,1)とかする奴はあまりいないな。
- 269 :デフォルトの名無しさん:2009/10/12(月) 22:20:08
- /)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
- 270 :デフォルトの名無しさん:2009/10/13(火) 16:41:04
- A1A2・・・に単語が並んでいて
B1B2・・・にグーグルかヤフーのその単語の検索件数を書き入れていくというような
Webクエリは作れないものでしょうか?
- 271 :デフォルトの名無しさん:2009/10/13(火) 18:09:44
- >>270
そのままでは件数がクエリで取り出せないので、VBAと組み合わせる必要がある
- 272 :デフォルトの名無しさん:2009/10/13(火) 18:18:16
- VBA使ってどうすればよいのでしょうか?
ぜひ御教授お願いします。数万の単語の検索に途方にくれています>__<
- 273 :デフォルトの名無しさん:2009/10/13(火) 19:14:30
- kwsk
- 274 :デフォルトの名無しさん:2009/10/13(火) 19:26:29
- ヒントだけでも教えてください。
1つのセルに1つの文字列が入っています。
各行はその文字列の集合とします。
その文字が何文字あるのかと、
各行の文字の全組み合わせ(各行の全部分集合)が全体の中で何個あるのか、
その結果を出力したいのですがどうしたらいいでしょうか?
例えば、
A,B,C,D
A,B
A,B,C
A
このように各セルに文字が入っていたとすると、
全体の中でAは4個、Bは3個、Cは2個、Dは1個あります。
また、組み合わせの個数は全体の中でそれぞれ、
(A,B)は3個、(A,C)は2個、(A,D)は1個
(B,C)は2個、(B,D)は1個
(C,D)は1個
(A,B,C)は2個、(A,B,D)は1個、(A,C,D)は1個
(B,C,D)は1個
(A,B,C,D)は1個となります。
これは具体的な例ですが、実際は何行何列でも何文字でも対応できるように一般化したいです。
意外と難しくてどうしたらいいかわかりませんでした。
こうすればできるだろうという方針だけでもどなたかご教授お願いします。
- 275 :デフォルトの名無しさん:2009/10/13(火) 21:11:13
- A,B,C,D なのに A,C がマッチするのかよ。
Instrで文字列内を検索すりゃ良いんでない?
てか、どんだけの文字数があるのかさっぱりわからん。
無数にある文字種類から検索するとなったら酷い事になりそうだ。
使われてる文字の一覧を作って、それを検索して行くのが良いかもな。
文字種類は無限です。って言うなら、俺は降りる。
- 276 :デフォルトの名無しさん:2009/10/13(火) 21:53:11
- >>275
わかりにくい説明で本当すいません。
「A,B,C,D」は1つの文字列ではありません。1つのセルに1つの文字が入っています。
コンマの区切りでセルを表したつもりでした。
「A,B,C,D」の、AはRange("A1")、BはRange("B1")、CはRange("C1")、DはRange("D1")
とに入っています。
実際はAとかBでなく、りんごとかバナナみたいな1つの単語が1つのセルに入ることになりますが。
(A,C)は(りんご、バナナ)という組み合わせだと考えていただけたらわかりやすいかと思います。
使われる単語は無限ではありません。
それでも仰るとおり数が増えれば酷いことにはなりますが、
そこはまた別問題で解決する算段はあります。
(りんご、バナナ)という組み合わせが全体に何個あるか?という話なんです。
わかりにくい説明ですいませんが。
VBAで、ある集合の部分集合を全て列挙するやり方だけでもどなたか
ご教示してくださいませんか?
一応自分でも調べてみましたがわかりませんでした。
- 277 :デフォルトの名無しさん:2009/10/13(火) 22:05:47
- >>274
ヒント モリケン
- 278 :デフォルトの名無しさん:2009/10/13(火) 22:12:31
- >276
275氏も書いてるがInStrでOK。
にしても説明ヘタだな、君は。
- 279 :デフォルトの名無しさん:2009/10/13(火) 22:29:15
- 人に判り易く自分のやりたい事を説明するっつーのも訓練が必要っすよ。 w
他人には(特に掲示板なんかでは)質問者のレベル・環境、そして何をどうしたいのかなんて判らないのだから。
(ここはExcel VBAスレだから或る程度は限定されてるけど)
- 280 :デフォルトの名無しさん:2009/10/13(火) 22:33:33
- >>275-279
すいませんがんばってみます。
サンプルでもうpすればわかりやすかったかも・
- 281 :デフォルトの名無しさん:2009/10/13(火) 23:35:10
- 1列に必ず同じ文字が入るなら簡単だろ。
この場合は4文字だから、組み合わせは
4C4=1
4C3=4
4C2=6
の11種類しかない。
組み合わせの形がわかるから、その組み合わせを順に行毎にループすりゃいい。
- 282 :デフォルトの名無しさん:2009/10/14(水) 10:28:23
- 270です。
VBAはかなりいろいろできるようになったのですが、ネットにつなぐスクリプトは
挑んだことがありません。またどうやってヤフーやゴーグルのデータを取り込んで
加工するかがわかりません。
一単語ごとに検索して検索数をコピペする作業は300ぐらいこなすとぐったりです。
どうすれば自動化したいのです・・・
- 283 :デフォルトの名無しさん:2009/10/14(水) 11:04:49
- まずは日本語でどうぞ。
>1 ★5
- 284 :283:2009/10/14(水) 11:06:50
- >2 ★5
だった;;
- 285 :デフォルトの名無しさん:2009/10/14(水) 11:09:03
- データ→Webクエリ(で対象のアドレスを入れて)でシートに取り込むのをマクロで記録すればOK
ただし、こっからが問題ありでヤフーやらぐーぐる(だろ?w)が仕様変更でレイアウトなどを変更したら、それに合わせて
修正必須になる
- 286 :デフォルトの名無しさん:2009/10/14(水) 11:13:47
- >>282
とりあえずヒントだけ。(環境依存な部分があるので、このままじゃ動かない)
Sub 件数取得()
kw = "ぬるぽ ガッ"
Set ObjHttp = CreateObject("Microsoft.XMLHTTP")
ObjHttp.Open "GET", "http://www.google.co.jp/search?hl=ja&q=" & kw, False
ObjHttp.Send
src = StrConv(ObjHttp.responseBody, vbUnicode)
Set ObjHttp = Nothing
src = Mid(src, InStr(InStr(src, "id=resultStats") + 24, src, "<b>") + 3)
src = Left(src, InStr(src, "</b>") - 1)
Debug.Print "「"; kw; "」のヒット件数="; src
End Sub
- 287 :デフォルトの名無しさん:2009/10/14(水) 12:34:58
- 質問させてください。(Ecel2003)
複数のセルをcsv形式で文字列変数に格納したいのですが、
Webで探したら1セル+","を繰り返す方法しか見つかりません
でした。
実際試して見ましたが対象セルが数万あるので処理に非常
に時間が掛かっております。
Joinなどを利用して一括で行うなど、高速化の手段は無い
のでしょうか?
(対象セルは矩形で表現できます)
ちなみに最終目的は複数のBookのある範囲のセル値を1つ
のcsvファイルにまとめることです。
よろしくお願いします。
- 288 :デフォルトの名無しさん:2009/10/14(水) 12:41:09
- >>287
あくまでも想像だけど、時間がかかっているのは、たぶんセルの内容を1つずつ読み出してるから。
配列に一気に読み込んでから処理すれば、もっと速くなるはず。
- 289 :デフォルトの名無しさん:2009/10/14(水) 13:01:44
- >>287
Join関数は一次元配列しか指定できないから、二次元から一次元への変換部分だけは
自分で工夫して作るしかない。
- 290 :デフォルトの名無しさん:2009/10/14(水) 13:11:04
- >>288
違うと思うよ。
単純に連結すりゃだんだんサイズが大きくなってメモリに入りきれなくなり別のメモリ領域をしょっちゅう探して確保しなきゃならないから時間がかかるんだ。
昔は必要なサイズの文字列を用意しておいてMidステートメント(関数じゃない)ではめ込んでいくのが常道だったが、今はJoin関数があるから楽だな。
- 291 :デフォルトの名無しさん:2009/10/14(水) 14:21:33
- >>286
神様ありがとうございます。
どういうふうな勉強をされたのでしょうか。ネットワーク関係のお仕事など
されているのでしょうか。参考になる本などを教えていただけるとうれしいです☆
ありがとうございます。
- 292 :287:2009/10/14(水) 14:26:52
- 回答ありがとうございました。
一次元に変換してJoinでやってみます。
- 293 :287:2009/10/14(水) 15:53:51
- 度々すみません。
追加で質問させてください。
先の件は一次元にしたら体感で数十倍以上早くなりました。
ありがとうございました。
文字列変数に格納したデータをcsv形式で保存すると、期待した
結果が""で囲われたcsvファイルが出来上がりました。
(以下サンプル)
"1,2,3,4,5,
1,2,3,4,5,
"
この先頭/末尾の「"」を入れたくないのですがどうすれば良い
のでしょうか?
- 294 :287:2009/10/14(水) 16:26:40
- 自己解決。
出力をWriteで行っておりましたがPrintに変えたら希望通りとなりました。
違いがよっく分かりませんが解決しましたのでご報告します。
ありがとうございました。
- 295 :デフォルトの名無しさん:2009/10/14(水) 16:27:54
- >>293
csv形式で保存するんじゃなくて、テキストファイルに出力する
- 296 :デフォルトの名無しさん:2009/10/14(水) 17:05:17
- 動的配列について質問なのですが
googleで検索などしたところ
Dim aaa() as string
など()のみで宣言したアトに
ReDim aaa(0 to 10)
のように範囲を指定して使う。みたいな例しか検索できませんでした
しかし、範囲を指定して使うならそれはすでに動的ではなく静的じゃないか
とずっと頭を抱えているのですが
要素数不明の配列を扱うことは無理なのでしょうか?
配列にデータを入れる際に、データ数カウントしながら入れて
その後ReDimすりゃいいってことですかね??
- 297 :デフォルトの名無しさん:2009/10/14(水) 17:10:03
- と思ったら、データを入れる段階で「インデックスが範囲外」的なエラーでましたorz
入れる前に範囲決めろとか無茶なんですが・・・そういうのはvbaじゃ無理ですかね?
- 298 :デフォルトの名無しさん:2009/10/14(水) 17:17:59
- >>296
あとから何度でもサイズを変更できるというのも一種の動的。
>>297
インデックス値を変数に入れておき、データを入れる前に、そのインデックス値を使って
配列をどんどん拡張していけばいい。
ただしReDimを使うと配列の中身がクリアされてしまうので
データを保持したままサイズを変更するにはReDim Preserveを使う必要がある。
VBAでは一般的なテクニック。
- 299 :デフォルトの名無しさん:2009/10/14(水) 17:20:39
- >>286
繰り返し処理をしていたら400ほどでデータがなくなりました。
ブラウザでグーグルを見ると、あなたは拒絶しますのような画面が出てグーグル
使えなくなりました・・・
どうすれば・・・・・
- 300 :デフォルトの名無しさん:2009/10/14(水) 17:23:17
- We're sorry...
- 301 :デフォルトの名無しさん:2009/10/14(水) 17:25:33
- >>299
しばらく待つ
- 302 :デフォルトの名無しさん:2009/10/14(水) 17:29:09
- >>299
そのサンプルはOpenでコネクションが開きっぱなしだから、まずは1回ごとにCloseしてみ
あとは、まあ連続アクセスは避けるとか。たとえば10秒間隔でアクセスするよう修正してみる
- 303 :デフォルトの名無しさん:2009/10/14(水) 17:46:57
- Google にクエリを送信すること
をしてはいけないということです・・・
世界のグーグルを怒らせてしまって・・・
- 304 :デフォルトの名無しさん:2009/10/14(水) 18:10:25
- We're sorry...
... but your computer or network may be sending automated queries.
To protect our users, we can't process your request right now.
See Google Help for more information.
- 305 :デフォルトの名無しさん:2009/10/14(水) 18:48:06
- >>298
アドバイスありがとうございます
要素数をuboundで数えて、残り少なくなったら配列を拡張するという方法をとってみました
とりあえずはこれでなんとかなりそうです
- 306 :デフォルトの名無しさん:2009/10/14(水) 23:45:51
- >>305
そんなファジーな使い方をw
かっちりと要素数取得すれば良いんじゃないか?
- 307 :デフォルトの名無しさん:2009/10/15(木) 00:12:46
- >>299
別に質問でも回答でもないんだけど・・・
グーグルをそういう使い方したらいけないというのがわかって為になったわ
- 308 :デフォルトの名無しさん:2009/10/15(木) 03:17:58
- ボクも、>>286のプログラムを使ってみた。
http://kabutomo.net/img.php?filename=dc_740000_1_1255544121.png
- 309 :デフォルトの名無しさん:2009/10/15(木) 08:30:17
- 299です。
復旧しました。復旧にはゆがんだ画像の絵のなかの文字を入力
させる画面が二回出てきて、復旧。その後、何回かグーグルを
普通に利用したところ、またゆがんだ絵の文字を入れろと・・・
すっかりブラックリストに載ってしまったみたいです・・・・・
英語グーグルにアクセスしても同じことで、違うのは、
送信ボタンが、I'm human と書いてあるところでした・・・
かなりこわい経験でした。400か500連続で、ストップというところ
でしょうか。気をつけてください。
それにしてもあなたはグーグルとのこの契約を知っているでしょう
とは・・・・
- 310 :デフォルトの名無しさん:2009/10/15(木) 08:59:36
- やはりあなたは検索しすぎです
ばいばいおさるさんw
- 311 :デフォルトの名無しさん:2009/10/15(木) 11:06:57
- >>309
ここから先はネットサービス板あたりの領域かな。
Googleの検索は1時間あたり何回までが限界とかそういうのをきちんと調査した上で、
それを越えないようなプログラムを工夫して作ることになる。
- 312 :デフォルトの名無しさん:2009/10/15(木) 11:30:00
- ありがとうございます。頼っていたサービスなので非常に怖い思いをしました。
なんか世界から拒絶されたような・・・
手で作業するよりも早ければそれでいいです。一分に5つぐらいのペースのを
つくってみます。一月ほど休むことにします。
プログラマー向けのページには一日5000までとは書いてあったのですが・・・
ヤフーは5万までみたいです。
- 313 :デフォルトの名無しさん:2009/10/15(木) 12:03:54
- 外部にproxy用意して色んなIPから接続してやるのが定番
- 314 :デフォルトの名無しさん:2009/10/15(木) 12:11:35
- 外部にボットを用意して色んなPCから接続してやるのはどうでしょうか。
- 315 :デフォルトの名無しさん:2009/10/15(木) 12:41:52
- ボットってか
もう
googleを攻撃しないであげて
- 316 :デフォルトの名無しさん:2009/10/15(木) 13:47:02
- なるほど良く考えたらスクリプトアタックか
- 317 :デフォルトの名無しさん:2009/10/15(木) 14:58:17
- OS:XP EXCEL2003、2007にて
Ctrl+6 や Ctrl+7といった数字のショートカットキー
を禁止にする方法はありませんでしょうか?
検索しても回答がなく、OnKeyでも拾えないので
困っています。
- 318 :デフォルトの名無しさん:2009/10/15(木) 18:03:21
- VBAとどのような関係が?
- 319 :デフォルトの名無しさん:2009/10/15(木) 20:53:16
- >>318
VBAでそのキーを押した際の処理を無効化したいんでしょ。
- 320 :デフォルトの名無しさん:2009/10/15(木) 21:27:48
- フックは簡単にできるでしょ。
と思いやってみたが本当に拾えないな。
APIにあったと思うけど、スレ的にどうなんだろ。
- 321 :デフォルトの名無しさん:2009/10/15(木) 22:20:20
- カーネルに入ってなかったっけか。
- 322 :デフォルトの名無しさん:2009/10/15(木) 22:23:40
- 結構前まではAPIの話題が出ただけで拒否反応する人はいたな
ライブラリ参照したりAPI使うのはエクセルVBAの構築手段として十分範囲内だと思うけど
API自体の話でもなければ
- 323 :デフォルトの名無しさん:2009/10/16(金) 13:30:41
- グーグルって自分ではロボットつかいまくってるのに自分には使わないでというのは
やっぱりおかしいわ
- 324 :デフォルトの名無しさん:2009/10/16(金) 15:39:10
- >>323
- 325 :デフォルトの名無しさん:2009/10/16(金) 16:25:15
- XP SP3
EXCEL2002
現在、クライアントPCのファイルをデスクトップ上にあるイントラネットショートカットアイコンに
ドラッグアンドドロップでファイルをアップロードしているのですが、
クライアントPCのファイルをイントラネットにアップロードする事はVBAで処理可能でしょうか?
- 326 :デフォルトの名無しさん:2009/10/16(金) 17:57:05
- VBAでTCP/IPって話は難しいとおもうが
VBAでイントラネットショートカットアイコンにドラッグアンドドロップ相当の
作業を行うのは幾分は簡単かと思う
- 327 :デフォルトの名無しさん:2009/10/16(金) 20:17:36
- >325
ショートカットアイコンは
何処へのどんなショートカットなの?
サーバとかの共有フォルダへのショートカットなら
VBA使わなくてもって気もするが
あえてVBAなら
FileCopy すればいいだけのような気がするのだけど
そのへんどうなの?
- 328 :デフォルトの名無しさん:2009/10/16(金) 20:48:18
- 質問させてください。
Excel2003ですが、任意の文字列を配列の中から検索して
インデックス番号を返すような処理はどのように行うのでしょう
か?
任意の文字列は必ず配列の中に完全一致で存在します。
また配列内に重複する文字列はありません。
myArray(0)="あああ"
myArray(1)="いいい"
myArray(2)="ううう"
myArray(3)="えええ"
myArray(4)="おおお"
の場合、"ううう"をキーにすれば2を求めたいのですが、配列
を回して比較する程度しか思いつきません。
Findメソッドなどで実現できないでしょうか?
よろしくお願いします。
- 329 :デフォルトの名無しさん:2009/10/16(金) 21:38:56
- >>328
残念ながらVBAだけで一発で検索する方法はない。
検索を第一に考えるなら、2次元配列にデータを入れておき、
必要に応じてワークシートに転送してからワークシート関数で検索するという方法がある。
文字列の長さがすべて一定ならJoinで1つの文字列にまとめてから位置を調べるという手もある。
- 330 :デフォルトの名無しさん:2009/10/16(金) 21:41:08
- >>328
目的によってはDictionaryオブジェクトが使える場合もある
- 331 :デフォルトの名無しさん:2009/10/16(金) 21:49:56
- System.Collections.ArrayList
- 332 :デフォルトの名無しさん:2009/10/16(金) 22:03:32
- 配列がとても大きくて順次比較していては時間がかかるって言う事なら
配列のキーの部分が 昇順または降順でソートされているという条件で
古典的なバイナリサーチ手法を使えぱ時間は短縮できる
- 333 :デフォルトの名無しさん:2009/10/16(金) 22:08:25
- ハイルデータが固定で数が多くないとか、なら連想配列だろうなあ
データ入力時に連想セットできたりするかね
- 334 :328:2009/10/16(金) 22:37:34
- 回答ありがとうございます。
フォルダ内にYYMMDD.xlsというファイルが複数あり、それをソートして
格納してある配列があります。
コンボボックスから2つのファイルを選択したらその期間内のファイルに
対して処理を行うことが目的です。
インデックス番号を取得してFor〜Nextの初期値と最終値にしたか
ったので質問させていただきました。
対象ファイル数は100以下です。
後のメンテを考え、素直に全数比較して新たな配列に格納する
方法で対応してみます。
ありがとうございました。
- 335 :デフォルトの名無しさん:2009/10/17(土) 08:07:18
- >>334
要素数が65536以下ならWorksheetFunction.Matchが使える。
この関数でバイナリサーチも出来るが、要素数が65536も超える場合も考慮するなら自前の関数書いた方がいいな。
要素数がたった100以下ならバイナリサーチじゃなくても無問題だけどな。
- 336 :325:2009/10/17(土) 10:22:18
- >>326
D&D相当の作業、是非教えて頂きたいです。
>>327
ショートカットアイコンは通常のフォルダアイコンに地球の絵が描かれています。
FileCopyで試すと「パス名が無効です」
FS.CopyFileで試すと「ネットワークパス見つかりません」とエラーが出ます。
パス名は"\\サーバ名\フォルダ"」と間違いないと思うのですが・・・・
- 337 :327:2009/10/17(土) 11:16:11
- >>336
「パス名が無効です」 だと共有フォルダ名が間違っている可能性があるけど
確認した?
エクスプローラでそのサーバーが見えるなら パス名確認した方が良いかも
FileCopyは
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt
とかでいいはすなんだけど
サーバー系は、ここ数年やってないんで最新バージョンなんかで仕様が変わっていたら
お手上げですが....
- 338 :337:2009/10/17(土) 11:19:58
- あっチョット訂正
FileCopyの構文で 最後の " が抜けてた
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt"
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt"
です
失礼しました (^^汗
- 339 :325:2009/10/17(土) 14:59:31
- >>337-338
パス名は何回も確認しました。プロパティーからコピペしたので間違えてないはずなんですが。
エクスプローラーのプロパティではパス名「http://サーバ名/フォルダ名」なんで、
「http:」外して/を\に変えたんですけど、根本的に間違ってるんでしょうか。
あと、補足ですがサーバはSharePointのワークグループです。
- 340 :327:2009/10/17(土) 15:16:03
- >>339
プロトコルがhttpなら
>>337の方法は使えないね
- 341 :デフォルトの名無しさん:2009/10/17(土) 17:01:58
- createobject("shell.application").namespace("http://サーバ名/フォルダ名").copyhere "c:\temp\test.txt"
- 342 :325:2009/10/17(土) 17:12:19
- >>340
やっぱそうなんですね。
xlsやSLK形式のデータはVBAで上書き保存出来たので、試行錯誤してみたんですが残念です。
>>341
ありがとうございます。試してみた所エラーは出ませんでしたが、コピー出来ていませんでした。
どこか違う所にコピーされたんでしょうかね(゚ー゚;Aアセアセ
- 343 :デフォルトの名無しさん:2009/10/17(土) 17:35:43
- CreateObject("WScript.Network").MapNetworkDrive "Z:", "http://サーバ名/フォルダ名"
FileCopy "c:\temp\test.txt", "z:\test.txt"
- 344 :デフォルトの名無しさん:2009/10/17(土) 17:43:22
- >>341
非同期なのかも
msgbox "ちょいと待つ"
- 345 :デフォルトの名無しさん:2009/10/17(土) 17:50:48
- >>339
sharepointはブラウザ上でみるとhttp://〜のリンクだけど、実際はWEBDAVでやりとりしてるよ。
http://〜のアドレスをコピペして、新しいブラウザに入力してファイルを開いてみ?
読み取り専用になるから。
対して、\\鯖名\〜だと読み書きできる。
「webdav vba」 で検索すると幸せになれるかも
- 346 :デフォルトの名無しさん:2009/10/18(日) 11:54:53
- excel2007です
vbaに登録されている(?)errの一覧を知る方法は無いでしょうか?
ループ内でロジックエラーが発生した時にerrに数値を設定してexitさせようと思ってるのですけど
その時にExcelに既に定義されているのとぶつかったら不味いかなと思いまして。
- 347 :346:2009/10/18(日) 12:04:34
- 自己解決
Raise メソッドに
Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー)
は、0 〜 65535 の範囲の値です。0 〜 512 の値はシステム エラー用に予約されてい
るため、ユーザー定義のエラーに使用できるのは、513 〜 65535 の範囲の値です。
クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数
vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前
付き引数 Number に vbObjectError + 513 を割り当てます。
とありました。スレ汚しすんません
- 348 :デフォルトの名無しさん:2009/10/18(日) 21:13:43
- VBA初めて作る初心者です。 土日をほぼ丸で使っても解決できませんでした。誰か助けてください。もしくは土日を返してくれ・・・。
目的 あるURLをIEで開き、全てを選択してエクセルに貼り付ける。
Sub ie_test_ExecWB()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "http://google.com"
Do While objIE.Busy = True
DoEvents
Loop
objIE.SendKeys "^a"
objIE.SendKeys "^c"
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
End Sub
実行すると、
実行時エラー’-2147417848(80010108)':オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
と表示されます。 objIE.SendKeys "^a"objIE.SendKeys "^c"
ではなく、objIE.ExecWB 17, 0 objIE.ExecWB 12, 0でもダメでした。
- 349 :デフォルトの名無しさん:2009/10/18(日) 21:33:33
- ほれ土日だよ
- 350 :デフォルトの名無しさん:2009/10/18(日) 21:36:25
- >>348
IEオブジェクトに SendKeys メソッドはないんじゃないの?
そんなことをしなくても、指定のページが開いたら
objIE.document.body.innerText
とすることで現在表示中のページのテキストを文字列として取得できる
- 351 :デフォルトの名無しさん:2009/10/18(日) 21:44:59
- メッセージからすると
Do While objIE.Busy = True
でエラーになってて開けないんだろ
- 352 :デフォルトの名無しさん:2009/10/18(日) 22:03:22
- >>348
ほい
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long
Sub ie_test_ExecWB()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "http://google.com"
Do While objIE.Busy = True
DoEvents
Loop
If SetForegroundWindow(objIE.hWnd) Then
SendKeys "+{TAB}^a^c", True
End If
Set objIE = Nothing
Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"
End Sub
- 353 :デフォルトの名無しさん:2009/10/18(日) 22:03:35
- >>348
ではあなたの月火をわたしにください
そうすればあなたに土日をさしあげましょう
- 354 :デフォルトの名無しさん:2009/10/18(日) 22:17:16
- 月火だよー
火憐だぜ
- 355 :348:2009/10/18(日) 22:21:19
- >>350~352
神々・・・!
ありがとうございます。
現在>>352様が提供してくださったコードで試していますがうまくいきません。
実行するとクリップボードにあるものがA1に貼り付けられてしまいます。
IEが起動するときに、googleのサイトと空のIEが二つ起動してしまうのですが
これが原因なのでしょうか?
ちなみにVISTA,IE7,officeXPという環境です。
>>353
わかりました。
私のカレンダーから月火を捕まえる為の縄を下さい。
- 356 :デフォルトの名無しさん:2009/10/18(日) 22:21:22
- >>352
>ほい
だってw
- 357 :デフォルトの名無しさん:2009/10/18(日) 22:22:58
- 保護モード Navigateでぐぐれ
- 358 :デフォルトの名無しさん:2009/10/18(日) 22:33:05
- >>355
わざと後出ししたな
- 359 :デフォルトの名無しさん:2009/10/18(日) 22:41:16
- Webクエリをマクロで記録は気に食わないのか?
Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:="URL;http://www.google.co.jp", _
Destination:=Range("$A$1"))
.Name = "www.google.co.jp"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub
- 360 :348:2009/10/18(日) 22:41:33
- >>356
だめか?
>>357
保護モードを解除したがだめです。
>>358
すまん
- 361 :デフォルトの名無しさん:2009/10/18(日) 22:45:47
- webbrowserコンポーネント使えば?
- 362 :348:2009/10/18(日) 22:48:17
- 金曜日の夜からVBAを触り始めまして、WEBクエリという単語は何度か目にしましたが
スルーしてました。
これだとテキスト形式での貼り付けになってしまいますね?
ページを丸ごとコピーして(HTML、画像も)貼り付けたいのです。
できるのかな?ちょっとクエリについて勉強してみます。
残り73分で!
- 363 :デフォルトの名無しさん:2009/10/18(日) 23:03:06
- OSとIEのバージョンを後出しされてしまったでござるの巻
- 364 :デフォルトの名無しさん:2009/10/18(日) 23:06:24
- > ちなみにVISTA,IE7,officeXPという環境です。
正直言おう
その環境を再現して動作確認するのが面倒
- 365 :デフォルトの名無しさん:2009/10/18(日) 23:11:07
- VistaにIE7にOfficeXPって、わざといらない子ばかり集めて何してんの?何かの罰ゲーム?
- 366 :デフォルトの名無しさん:2009/10/18(日) 23:17:04
- Webクエリで画像まで取り込む方法ってあったっけ?
- 367 :デフォルトの名無しさん:2009/10/18(日) 23:24:31
- >>348
VBA初めて作る初心者です
初めてでIEからデータ取得なんてできるわけないし、
ここにソースを貼ってもらっても使いこなせるわけ無い
むだ
- 368 :348:2009/10/19(月) 00:29:41
- できた。
みんなありがとう
- 369 :デフォルトの名無しさん:2009/10/19(月) 00:32:13
- シートにwebbrowser貼れば?
- 370 :デフォルトの名無しさん:2009/10/19(月) 00:59:37
- >>368
できたら何がダメだったか原因書こうな
たとえショボミスでも、だ
同じ質問がきたときウザいだろ
- 371 :デフォルトの名無しさん:2009/10/19(月) 02:03:39
- VBA使いの皆様へ
VBAとExcelは余り相性が良くありません。
VBAをExcelの上で使うとVBAもExcelも下手になることが
多いです。Excelを使う場合は、出来る限りVBAを使わず
シートの上の数式だけでなんとか出来ないか先ず考えま
しょう。
Excelで本格的な大量計算を行うのは向いていません。
Excelは概して計算が早く無いからです。
VBAを学びたいというのであればAccessのほうが
がおすすめです。
- 372 :デフォルトの名無しさん:2009/10/19(月) 04:51:58
- hagedo
- 373 :325:2009/10/19(月) 12:55:44
- >>343
ネットワークドライブの割り当てもやってみたんですが、「ネットワーク名がみつかりません」になってしまうんです。
>>341
やってみましたが、結果は変わらずでした。ありがとうございます。
>>342
オフコン系SEなのでWEBDAVとは初耳でした、ありがとうございます。色々調べてみます。
ちなみに新しいブラウザにURL入力しファイルを開いてもhttp://〜のままでした。
- 374 :デフォルトの名無しさん:2009/10/19(月) 13:33:05
- >>371
WorksheetFunction使えばいいやん
- 375 :デフォルトの名無しさん:2009/10/19(月) 13:47:51
- userformを見えなくするのに
unload meと
userform1.hide
が有りますけど(他にもあるのか知りませんが)、この違いって何ですか?
- 376 :デフォルトの名無しさん:2009/10/19(月) 14:33:00
- >>375
hideは見えなくなるだけでまた復活させることができる。例えばテキストボックスの中身とかそのまま残ってる。
unloadは完全に消去
- 377 :デフォルトの名無しさん:2009/10/19(月) 16:21:50
- >>375
簡単に言うとUnloadはメモリから削除してしまう。
hideは字の如くメモリに残したまま見えなくするだけ。
- 378 :デフォルトの名無しさん:2009/10/19(月) 17:22:44
- >>376-377
ありがとです。
後で再利用するなら hide もう要らないなら unload ですね。
- 379 :デフォルトの名無しさん:2009/10/19(月) 17:47:45
- unload 378
- 380 :デフォルトの名無しさん:2009/10/19(月) 18:28:22
- >>379
379.visible = false
- 381 :デフォルトの名無しさん:2009/10/19(月) 19:12:37
- ユーザーフォームを印刷しようと思ってるのですが、ユーザーフォーム自体のサイズが大きいのでA4のサイズに納まらずはみ出てしまいます…
A4サイズに縮小して印刷する方法はないでしょうか?
コードはシンプルに
userform1.printform
だけです。
かなりググッたりしてみましたが、良いホムペもなかったので…
- 382 :デフォルトの名無しさん:2009/10/19(月) 19:37:40
- >>373
いやだからhttp://でアクセスできるんだけど読み取りになるんだよ。
それはhttpプロトコルの制約だから。
http://を\\サーバIPにして後ろの/を全て\になおしてみて。
- 383 :デフォルトの名無しさん:2009/10/19(月) 19:43:01
- >>381
縮小印刷はプリンタドライバの仕事。機種依存になるので自力で試行錯誤が必要
- 384 :デフォルトの名無しさん:2009/10/19(月) 20:33:33
- excel2007
リストボックスに3列データを入れる事が出来るようになったとこなんですけど
(1) これタイトルみたいなのを付ける事は出来ないんですか?
コード 商品名 支店 ←付けたいタイトル
9999 xxxxxxxxx xxxxxxx ←データ
みたいな感じで。
(2)
code=Userform1..ListBox1.Text
で選択したコードを拾う事は出来たんですが、この例で商品名を拾うにはどのようにすれば良いのですか?
- 385 :デフォルトの名無しさん:2009/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:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/19(月) 22:07:56
- 今まで快適に使えていたエクセルファイルが、
突然アホみたいに重くなって起動が容易じゃない。
色々調べたけどさっぱり解らない…。
誰か助けてください。
・サイズは600KBほど
・隠れてるオブジェクト無し
・使用範囲以外に隠れデータ一切無し
(書式設定やリンクなど)
・シート30枚ほど
・モジュールの解放もやってみたが改善せず
- 389 :デフォルトの名無しさん:2009/10/19(月) 22:13:45
- 特定ファイルだけ?
ハードディスクが死にかけてるとか
- 390 :デフォルトの名無しさん:2009/10/19(月) 22:18:01
- ウィルスチェックoffにして開いてみれ
- 391 :デフォルトの名無しさん:2009/10/19(月) 22:19:53
- 他のファイルのシートと連動させてるようなのだと
ファイルの置き場所変わっただけで
リンク先行方不明連発で死亡とかあるから
Excelきらい
- 392 :388:2009/10/19(月) 22:54:19
- >389
特定ファイルだけです。
会社で作成したデータ集計用のファイルです。
これ1つだけが異常に重くなり、開く時に
CPU100%を食う状況になっています。
>390
ウィルスチェックoffにすることは出来ないです。
会社で常にネットワーク接続されてるもので…。
- 393 :デフォルトの名無しさん:2009/10/19(月) 23:22:01
- >>388
ここは Excel VBAスレなんでスレ的に考えると
VBAの処理が 異常に時間がかかってるのでは?
原因として
・VBAのコードを変更した為に 異常なループが発生した
・元々のVBAのコードにバグがあって あるデータの組み合わせで
異常なループとなった
とか?
だとすれば
とりあえずオープン時実行するイベント処理停めてみたら?
イベントプロシージャの先頭に Exit Sub を入れてみる
- 394 :デフォルトの名無しさん:2009/10/19(月) 23:31:32
- >>392
ローカルにコピって
スタンドアロンのPCでテスト汁
さらにウィルスチェックoffにして開いてみれ
- 395 :デフォルトの名無しさん:2009/10/19(月) 23:46:05
- >>392
xlbファイルを削除する。
CドライブをExcel*.xlbで検索してみて。
- 396 :デフォルトの名無しさん:2009/10/19(月) 23:58:33
- >>391
そんな使い方しないよ。
- 397 :385:2009/10/20(火) 00:54:42
- 387さんありがとうございます。
値を保存するという便利な方法があったんですね。
勉強になります。おかげさまで単語帳っぽくなりました。
残りのチェックボックスにかかわる部分ですが、もう少し努力してみます。
ただ
・チェックを各英単語ごとに反映させる方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
これらがどうにもできそうにないです… すんません
チェックボックスにチェック入れた単語のどこかの列に、何かしら数字など加え
その値を返して、状態を判断することしか思いつかないのですが、
何かもっと良い方法ありますかね?
- 398 :デフォルトの名無しさん:2009/10/20(火) 01:21:27
- とりあえず出来る方法を思いついたなら、それでやればいい
その方法だとこんな問題がある、とかならそれを質問すればいい
もっと良い方法とか漠然と聞かれると速度房がアップ始めるぞ
- 399 :384:2009/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 :デフォルトの名無しさん:2009/10/20(火) 10:28:27
- あらあらこんなに汚しちゃうなんて……イヤラシイ子ね……フフフ
- 401 :デフォルトの名無しさん:2009/10/20(火) 12:38:07
- ここに速度厨なんている?
俺は速度より美しいか汚いかにこだわるが、たまに速度厨と勘違いされる。
汚いのは遅いって大体決まってるけどな。
そこの君、お前だよw
- 402 :デフォルトの名無しさん:2009/10/20(火) 19:25:43
- >>385
完成したらサンプル見せてください。お願いします。
- 403 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/20(火) 21:21:06
- >>401
誰を煽ってるんだよw
唐突過ぎてわろたわ
- 405 :デフォルトの名無しさん:2009/10/20(火) 21:49:07
- >>403
100 という文字列での 1の部分でヒットしているみたいね
とりあえず下記ではどう?
Set rng = ActiveSheet.Range("A1:A11").Find(1, LookAt:=xlWhole)
- 406 :デフォルトの名無しさん:2009/10/20(火) 21:56:20
- Find関数はいろいろとバグがある。
- 407 :405:2009/10/20(火) 22:08:06
- >>406
たしかに今回の場合だと
セルの表示形式を数値にすると ヒットしなくなるね
- 408 :デフォルトの名無しさん:2009/10/20(火) 22:09:02
- たしかにオートフィルタとかのVBAの使い勝手がいい
- 409 :392:2009/10/20(火) 22:43:00
- 解決しました。
tmpファイルを全て削除してみたところ、
かなり軽減されましたがまだ反応が鈍かったため、
思い切って新規エクセルに全て
コピーしてみました。
結果、快適に動くようになりました。
おまけにサイズも400kbまで小さくなりました。
- 410 :デフォルトの名無しさん:2009/10/20(火) 22:57:36
- >405
有難うございます。
明日になってしまいますけど、試してみます。
上手くいったら、その時に
LookAt:=xlWhole
の意味を理解したく教えて下さい。
- 411 :デフォルトの名無しさん:2009/10/20(火) 23:29:44
- 特定の文字列にヒットする条件ならワークシート関数が強力だが
勉強しはじめなら、セルを一個一個確認してループさせる手法からハイルべき
特にエクセルVBAなら
- 412 :405:2009/10/20(火) 23:37:10
- >>410 & 411
>>411 の意見には賛成です
今回の場合は特に
>>410 の質問の回答ですが
Findは Excel本体の検索とほぼ同じものです
マクロの記録をいろいろしてみると分かると思いますが
"完全に同一のセルだけを検索する"です
それと>>407 へ書いたけど
セルの表示形式が数値だと失敗するかもです
一応 標準形式だとうまく検索できたのだけど
- 413 :デフォルトの名無しさん:2009/10/21(水) 07:11:50
- Findメソッドは基本的に文字列を検索するもんだ。
まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。
- 414 :デフォルトの名無しさん:2009/10/21(水) 13:53:11
- ちょっと暇なときにVBA勉強しようと思うんですが、勉強するなら2003と2007どっちがいいですか?
- 415 :325:2009/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 :デフォルトの名無しさん:2009/10/21(水) 15:37:47
- >>414
自分が持ってんのがどっちなのかによるでしょ。
今からなら2007の方が良いのかなとは思うけど。
- 417 :デフォルトの名無しさん:2009/10/21(水) 16:11:22
- >>416
ありがとうございます。持ってるのが2000と2007だったので2007勉強することにしました
- 418 :デフォルトの名無しさん:2009/10/21(水) 20:02:12
- 2000と2007しかもってないのに2003を選択肢にするとは・・・できる
- 419 :デフォルトの名無しさん:2009/10/21(水) 20:03:45
- >>415
http://q.hatena.ne.jp/1108018134
これでやってみな。
ヒントはきちんといかそうぜ。
- 420 :410:2009/10/21(水) 21:43:51
- >411-412
上手くいきました。有難うございます。
>413
そのまさかなんですが・・・
なんとか上手くいきました。独学&ヘルプ@2007ではなかなか上達しないですね。今度、本屋行ってきます!
- 421 :デフォルトの名無しさん:2009/10/21(水) 22:04:58
- いやバグはあるよ。
- 422 :デフォルトの名無しさん:2009/10/21(水) 22:09:25
- 【合法】みんなズッキーニでヘヴン状態しようぜ!!
http://namidame.2ch.net/test/read.cgi/yasai/1223375038/
- 423 :デフォルトの名無しさん:2009/10/21(水) 22:51:50
- 初心者です。質問させてください。
XP、office2000において、onactionで呼び出すsub hogeにsingleの引数を複数渡したいのですが、どのようにすればよいか教えてください。
.onaction("'hoge, arg1,arg2'")
とかだとうまくいきませんでした。
- 424 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/21(水) 23:52:34
- 二十判定は出来ない
変数とかに格納したり論理結合したり
ただ1か2のどちらかなら、文字列結合すりゃいい
- 426 :デフォルトの名無しさん:2009/10/21(水) 23:58:26
- >>425
了解しました
- 427 :デフォルトの名無しさん:2009/10/22(木) 09:32:17
- >>423
.OnAction = ”'hoge””arg1””,””arg2””'”
- 428 :デフォルトの名無しさん:2009/10/22(木) 11:55:51
- java経験しかないまったくの初心者ですが、質問させてください
列AQの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列AUのn1のセルに代入
これをAQの行全てで実行したいのです
Cにおいてhoge1が重複することはありません
どうかよろしくお願いいたします
- 429 :デフォルトの名無しさん:2009/10/22(木) 12:04:24
- vlookup
- 430 :デフォルトの名無しさん:2009/10/22(木) 12:21:27
- 何行あるかしらんが、列全部にvlookupに限らず参照判定関数入れるのは
そーゆーときは配列に流して連想しる
- 431 :デフォルトの名無しさん:2009/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:2009/10/22(木) 14:38:41
- >>419
そのURLはググってる最中に何度か訪れたんですけど、
ちょっと私には扱えそうもなかったんでスルーしてたんですけど、
頑張って調べながらやってみたら2〜3度エラーが出ましたが、
希望通りアップロード出来ました!誠にありがとうございました。
一年分の便秘が治ったようなすがすがしい気分ですw
- 433 :デフォルトの名無しさん:2009/10/22(木) 15:16:28
- >>431
no
- 434 :325:2009/10/22(木) 15:22:42
- >>419
すいません、これってLZHファイルとかは扱えないんでしょうか?
TXTやSLK形式は成功したんですけど、LZH形式はエラーになったんです・・・
- 435 :434(325):2009/10/22(木) 15:26:16
- 自己解決しました。
LZH形式もいけました。ファイル名が不味かったようです。
- 436 :434(325):2009/10/22(木) 15:28:23
- 連投すみません。
LZH形式、エラーこそ出ませんでしたが、解凍すると文字化けしてまいした。
- 437 :434(325):2009/10/22(木) 15:46:49
- 再度自己解決しました。.typeと.charaset外したら正常に解凍出来ました。
スレ汚しすみませんでした。逝ってきます。
- 438 :デフォルトの名無しさん:2009/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):2009/10/23(金) 09:54:04
- >>419さんの方法でアップロード解決したんですが、半角カナ等のファイル名をうpすると、
実行時エラーになります。回避する方法ありますでしょうか?
D&Dでうpすると正常に出来るんですが・・・・
- 440 :431:2009/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 :デフォルトの名無しさん:2009/10/23(金) 12:20:06
- >>439
エンコードでぐぐりな。
- 442 :デフォルトの名無しさん:2009/10/23(金) 12:29:34
- >>440
そんなんで完成?
Findメソッドの引数が1個だけって大丈夫カヨ
WhatとLookInとLookAtの最低三つは必要じゃないの?
- 443 :デフォルトの名無しさん:2009/10/23(金) 13:52:52
- >>442
一応ちゃんと動作しましたよ!
今回一回だけ動けばいいマクロなので、結果に間違いがなければOKです!
- 444 :デフォルトの名無しさん:2009/10/23(金) 14:17:40
- >>443
そりゃたまたまでんがな。
何もいじくってない状態じゃ部分一致だが、それでいいの?
- 445 :デフォルトの名無しさん:2009/10/23(金) 14:28:40
- 本人がOKってんだからいいんじゃね?
- 446 :デフォルトの名無しさん:2009/10/23(金) 14:38:09
- >>444
う、もしかして上手くいったと勘違いしてるだけなんですかね…
codeはxx01みたいな形で、nameは文字列(重複部分多々あり)なんですが
ちゃんと調べてみます!
- 447 :お願いします><:2009/10/24(土) 01:26:35
- VBA初心者です。
学校の宿題で
「y=sinXとY=Xの2本の直線で囲まれた面積をVBA関数を用いて求めなさい。」
という問題がでました><
ですが、今日初めてVBAという言葉を聞いたぐらいですので、まったく分かりません( ;∀;)
どなたか記入するコードを教えて頂けないでしょうか?
- 448 :デフォルトの名無しさん:2009/10/24(土) 01:45:00
- 学校の宿題は自分でやらなきゃダメ><
何の前提もなしにそんな宿題が出るはずないから、わからないのは貴方がサボっていたってことでしょ
- 449 :デフォルトの名無しさん:2009/10/24(土) 02:20:06
- 宿題スレ池
- 450 :デフォルトの名無しさん:2009/10/24(土) 02:45:13
- >>447
これは酷いwww
これが社会に出て行くと思うと末恐ろしいな
- 451 :デフォルトの名無しさん:2009/10/24(土) 10:22:29
- sinXって直線なのかね
- 452 :デフォルトの名無しさん:2009/10/24(土) 10:57:44
- >>424
遅レスですが、こんなアイディアも。
Select Case Cells(4,1) & Cells(4,2)
case "11"
case "12"
- 453 :452:2009/10/24(土) 10:59:38
- >>425 見てなかった… すまん
- 454 :デフォルトの名無しさん:2009/10/24(土) 11:43:07
- セル参照の計算式
=G5*K3+M1
セル参照+数字の計算式
=F6*G6*3.14
数字のみの計算式
=15*21*45
この数式を区別して色分けする事は可能ですか?
せめて上2つと下1つだけでも区別できればいいんですが
- 455 :デフォルトの名無しさん:2009/10/24(土) 11:47:42
- >>451
正弦波だから、Y=1 から Y--1 までを往復する曲線かな。
Y=Xの直線とは1点交差するけど、2点とは交差しなんじゃないか?
よくわかんないけどw
- 456 :デフォルトの名無しさん:2009/10/24(土) 12:13:36
- だいたい2本の直線で囲まれる面積ってなによ
問題の意味すらわかんないならVBA以前の問題
- 457 :デフォルトの名無しさん:2009/10/24(土) 12:25:46
- 非ユークリッド幾何だと日常的
- 458 :デフォルトの名無しさん:2009/10/24(土) 12:31:59
- 大圏航路かよ 何年生の課題だ
- 459 :デフォルトの名無しさん:2009/10/24(土) 13:43:37
- >>454
手元にPCがないから確認できないけど、今ぱっと思いついた案が1つある。
セルに入力されている数式を取得し、文字列操作関数を使用し演算子の部分で区切る。
区切られた文字列を確認して全てにアルファベットが含まれていれば、セル参照あり、全く含まれていなければセル参照なし。
その他は混合。
どうでしょう?
文系のおいらの考えなので、バカかと思う方はたくさんいると思うけど。
- 460 :デフォルトの名無しさん:2009/10/24(土) 13:46:03
- >>459だけど一部訂正。
「セル参照あり」→「セル参照のみ」だったよ。
- 461 :デフォルトの名無しさん:2009/10/24(土) 15:08:03
- 問題文を写し間違えただけだろ
Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
片方だけ積分して倍すればいい
- 462 :デフォルトの名無しさん:2009/10/24(土) 19:24:38
- >>459
0.100000000E+00
- 463 :デフォルトの名無しさん:2009/10/24(土) 19:26:00
- >Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
kwsk
- 464 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/24(土) 21:22:20
- >>462
最初に「=」が付いてるか確認すれば問題ないと思う。
- 466 :デフォルトの名無しさん:2009/10/24(土) 22:22:36
- 0.100000000E+00 +0.100000000E+00
- 467 :デフォルトの名無しさん:2009/10/24(土) 22:27:46
- 絶対に関数は使われていないのだろうか?
- 468 :デフォルトの名無しさん:2009/10/24(土) 22:36:56
- "=*[A-Z][1-9]*"や "=*[A-Z]$[1-9]*"って何を表してるんですか?
- 469 :デフォルトの名無しさん:2009/10/24(土) 22:42:26
- 性器
- 470 :デフォルトの名無しさん:2009/10/24(土) 22:44:17
- >>467
そういう話になってくると正規表現?
- 471 :デフォルトの名無しさん:2009/10/24(土) 23:17:41
- 正規表現だと、
*[A-Z]$[1-9]*
の、文末一致or後方参照の $ が説明付かない。
- 472 :デフォルトの名無しさん:2009/10/25(日) 00:45:26
- userformのtext1に入力された値を使うとき、
userform.text1と書くと思いますが、
text1、text2と順番に参照していきたい時、イメージとしては"text"&i のように変数で指定したいんですがエラーになってしまいます。
何かいい方法はないでしょうか?
- 473 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 01:25:54
- >>472
配列変数を使う(text1とtext2を配列変数に突っ込んで使う)
- 475 :464:2009/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 :デフォルトの名無しさん:2009/10/25(日) 02:00:43
- >>474
ありがとう
- 477 :デフォルトの名無しさん:2009/10/25(日) 02:59:44
- >>475
http://msdn.microsoft.com/ja-jp/library/h5181w5w.aspx
少しは調べろよカス
- 478 :デフォルトの名無しさん:2009/10/25(日) 08:59:51
- >>475
だから、正規表現じゃないって言ってるのだよ。
=$A$1 を判定させるマッチパターンは、
pattern = "=\$[A-Z]\$[0-9]"
- 479 :デフォルトの名無しさん:2009/10/25(日) 15:58:07
- 色々教えてもらいここに辿り着きました
1つのフォルダーにあるいくつかのcsvファイルの全てのA列からC列のデータを削除したいのです
そういうvba作ってもらえませんか?
どうかお願いします
- 480 :デフォルトの名無しさん:2009/10/25(日) 16:05:55
- >>479
>>2の★5を100万回読むんだ
- 481 :デフォルトの名無しさん:2009/10/25(日) 16:06:04
- 了解
待ってな
- 482 :デフォルトの名無しさん:2009/10/25(日) 17:02:08
- >>479
いくらくれる?
- 483 :デフォルトの名無しさん:2009/10/25(日) 22:05:39
- >>482
お金は…ないんです(T_T)
- 484 :デフォルトの名無しさん:2009/10/25(日) 23:30:41
- ユーザーフォームでつくったコンボボックス等をダブルクリックして編集画面を開きます。
ここに標準モジュールで作ったプロシージャをコールしても反映してくれません。
なぜでしょう?
- 485 :デフォルトの名無しさん:2009/10/25(日) 23:38:10
- ・何がしたいのか
・現状どうなっているのか
・それに対する自分の意見
・自分の環境は何なのか(CPU,OS,Office)
・サンプルをアップローダーに。
このくらいは質問するなら情報として欲しいわ。
- 486 :484:2009/10/25(日) 23:48:06
- なんか勘違いしてたっぽい。
コンボボックスにあらかじめ入れておく項目は標準モジュールからは呼び出せないか。
- 487 :デフォルトの名無しさん:2009/10/25(日) 23:54:43
- 最後疑問系なの
質問?
コンボボックス
リストボックスのリストは標準モジュールで指定出来るでしょ
値を入れておきたいならValueに入れればいいでしょ
- 488 :デフォルトの名無しさん:2009/10/26(月) 09:00:41
- マクロ記録
エクセルでCSV開く
該当行削除
保存
記録停止
↑で出てた正規表現ってよくわかんないんだが何が出来るの
- 489 :デフォルトの名無しさん:2009/10/26(月) 09:57:05
- 日本語でOK
- 490 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/26(月) 20:36:59
- >>1の★4に該当しますが、他にいいスレがあったら誘導してください。
Long型の数値からリトルエンディアンByte(4)型に分割したいのですが、どのようにしたらよいでしょうか。
VBだとLong型が8バイトと聞いたので、こちらに質問しました。
よろしくお願いします。
- 492 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/26(月) 23:13:30
- >490
2007は知らんけど2003ならば
Application.StatusBar = False
- 494 :デフォルトの名無しさん:2009/10/27(火) 00:26:15
- >>491
VBAのLongは4バイトです
8ビットずつマスクとシフトしながら分割してください
- 495 :デフォルトの名無しさん:2009/10/27(火) 00:27:36
- >>492
VBSはスレチ
- 496 :491:2009/10/27(火) 01:21:41
- >>494
ありがとうございます。
ただ、そのままするとマイナスの値のときにおかしくなってしまいます。
もうすこし詳しく教えていただけないでしょうか。
- 497 :デフォルトの名無しさん:2009/10/27(火) 01:34:34
- >>496
MSBだけ別の変数にとっとけばいい
- 498 :デフォルトの名無しさん:2009/10/27(火) 01:41:11
- 492はどうみてもJavaSな件
- 499 :491:2009/10/27(火) 16:25:08
- >>496
ありがとうござました。
マイナス関係なくできました。
難しく考えすぎてたみたいです。
- 500 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/27(火) 20:01:28
- Dim col As New Collection
- 502 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/27(火) 23:15:04
- 解決しました。
理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても
エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。
コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、
正常に2度目以降も動くようになりました。
ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば
是非アドバイスおねがいいたします。
- 504 :デフォルトの名無しさん:2009/10/27(火) 23:45:25
- 残ってるのはDBSオブジェクトじゃね
エラー出たときとか終わるときにちゃんと閉じてる?
- 505 :デフォルトの名無しさん:2009/10/28(水) 00:36:54
- そこでした。
オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、
いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw
コード多すぎて無理臭いので、クエリのほうから指定することにしました。
以降はいい加減に組まないように注意せねばでした。
ありがとうございました
- 506 :デフォルトの名無しさん:2009/10/28(水) 10:55:56
- エクセルのマクロの問題に対する質問はここでいいですか??
- 507 :デフォルトの名無しさん:2009/10/28(水) 11:13:24
- OK
バージョン書いてね
- 508 :デフォルトの名無しさん:2009/10/28(水) 13:01:21
- ここは宿題かたずけますスレって考えてもいいんですかィ
- 509 :デフォルトの名無しさん:2009/10/28(水) 13:19:44
- >>508
質問の内容とタイミングによる
時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし
VBA厨が喜んでプログラムを作ってくれることもある
- 510 :デフォルトの名無しさん:2009/10/28(水) 13:55:04
- とりあえず書いてみます
Excel2003
めっちゃ初歩的です…
Do〜LoopかForーNextを使わなければならないみたいです。
1〜10までの整数で
偶数の和をD1
奇数の和をE1
に表示せよ です。
- 511 :デフォルトの名無しさん:2009/10/28(水) 14:02:20
- ExcelはスプレッドシートソフトでVBAの練習台じゃ
ありません。
VBAの練習をしたいのなら、Accessでやれっつーの
(AccessではExcelでやれっていわれるかも)
てなわけで、Active BASICがVBAと文法互換だったら
いいのになとおねだりしよう
【サーバー各所】ActiveBasicその11【冬眠中】
http://pc12.2ch.net/test/read.cgi/tech/1241316033/
- 512 :デフォルトの名無しさん:2009/10/28(水) 15:07:11
- >>511
あほか。Access持ってる奴なんてごく少数だろうが。
- 513 :デフォルトの名無しさん:2009/10/28(水) 15:22:58
- ACCは初めにオブジェクトアクセスを経由する必要があるから、VBAの初学には向かないよ、と思ってる
エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある
マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位
逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども
- 514 :デフォルトの名無しさん:2009/10/28(水) 16:37:27
- >>513
VBA扱う場合はやっぱフォームから入るべきだろ。
テキストボックスで入出力でいいじゃん
Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で
VBAの基本とExcelの基本が十分出来上がって独立
共存できるようになってからじゃないと両方駄目になる悪寒
Accessの場合はVBAが出来てからテーブルやらクエリ
やら覚えていく方法がとれる。
- 515 :デフォルトの名無しさん:2009/10/28(水) 17:06:49
- 別のスレでやれ
- 516 :デフォルトの名無しさん:2009/10/28(水) 18:30:39
- VBAを使用してアルバイトの出勤簿を作成しています。
例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで
自動で表示する場合はどのようにすればよいでしょうか?
- 517 :デフォルトの名無しさん:2009/10/28(水) 20:57:08
- フリガナにはそれ用のワークシート関数を使う
- 518 :デフォルトの名無しさん:2009/10/28(水) 21:23:03
- PHONETIC関数でしょうか?
フリガナを表示しないで、氏名(漢字)が表示されてしまいます。
- 519 :デフォルトの名無しさん:2009/10/28(水) 21:39:35
- 大した人数でないなら
名前と読み方リスト作ろうぜ
- 520 :デフォルトの名無しさん:2009/10/28(水) 21:44:07
- 読み方リストを作り、セル参照を使うということですか?
- 521 :デフォルトの名無しさん:2009/10/28(水) 21:51:46
- でもなんでも
どう料理するかは考えてないけど
テキストボックスに名前入れると読み仮名ラベルに表示するとかかな
- 522 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/28(水) 22:07:25
- ワークシート関数を使うことに決めました。
- 524 :デフォルトの名無しさん:2009/10/28(水) 22:08:51
- Mod 演算子を使わないのは速度厨なせいでつか?
- 525 :517:2009/10/28(水) 22:16:47
- http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414375849
なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね
- 526 :デフォルトの名無しさん:2009/10/28(水) 22:40:03
- ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる
- 527 :デフォルトの名無しさん:2009/10/28(水) 22:49:49
- 変更して保存
↓
Excelを終了
とするにはどういうふうに構文をかけばよいでしょうか?
- 528 :デフォルトの名無しさん:2009/10/28(水) 22:59:33
- >>527
Application.Quit
- 529 :デフォルトの名無しさん:2009/10/28(水) 23:49:49
- そういえばかなり前に1からnまでの和をループを回して求めよってのに
For i = 1 To n
Next
和 = (1 + n) * n / 2
みたいなのがあったな。
- 530 :デフォルトの名無しさん:2009/10/28(水) 23:53:53
- >>522
ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。
- 531 :デフォルトの名無しさん:2009/10/29(木) 00:19:50
- 奇数 = 0
偶数 = 0
For i = 1 To 10 Step 2
奇数 = 奇数 + i
偶数 = 偶数 + (i + 1)
Next
Debug.Print 奇数, 偶数
- 532 :デフォルトの名無しさん:2009/10/29(木) 00:26:27
- >>530
>ビット演算なんて分るやつあまりいないんだから
え!そうなの?
- 533 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/29(木) 01:18:45
- >>533
ありがとうございます!!また頼むかもしれませんがよろしくお願いします。
- 535 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/29(木) 09:15:12
- >>532
officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品
- 538 :デフォルトの名無しさん:2009/10/29(木) 09:24:31
- >>529
なにそれ面白い
ビット演算とか知識はかろうじてあるけどナニソレ
- 539 :デフォルトの名無しさん:2009/10/29(木) 12:14:21
- 俺ならこうやって高速化するぜ
For i = 1 To n Step n
Next
和 = (1 + n) * n / 2
- 540 :デフォルトの名無しさん:2009/10/29(木) 12:21:10
- すまんが教えてください
vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。
ExecWBとSendKeysでやってみたが上手く行かなかった。
やり方に問題があるのか、違う方法があるのか?
教えてください。
- 541 :デフォルトの名無しさん:2009/10/29(木) 12:21:25
- おれならこうだな
for i = n to n
next
- 542 :デフォルトの名無しさん:2009/10/29(木) 12:46:51
- 速さならこっちかな?
For i = 1 To n
Exit for
Next
和 = (1 + n) * n / 2
- 543 :デフォルトの名無しさん:2009/10/29(木) 13:08:40
- さすがにこれは反則だろうな
Goto aaa
For i = 1 To n
Next
:aaa
和 = (1 + n) * n / 2
- 544 :デフォルトの名無しさん:2009/10/29(木) 13:21:48
- 和 = (1+n)*n/2
Debug.Print 和
ループ
こうか!
- 545 :デフォルトの名無しさん:2009/10/31(土) 10:22:29
- 質問させてください。(Excel2003 XP)
ExcelでRS-232-C通信を行おうとしております。
大昔に一度、何かを見ながら自作したマクロを参考にやっています。
当時はMSCommを使用しておりましたので、同様にツールボックスから
MSCommをフォームに貼り付けると、
「サブジェクトは指定された操作に対して信頼されていません。」
と表示され、貼り付けることができません。
Webで調べると、どうやら
ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
を実行したことで使用出来なくなってしまったようです。
対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
削除して回るのも非現実的です。
MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
更新プログラムの削除や新たに何かをインストールしなくても使用できる
方法はないでしょうか?
また他にWinAPIで行う方法もありましたがこちらで行う方法が主流?
なのでしょうか?
よろしくお願いします。
- 546 :デフォルトの名無しさん:2009/10/31(土) 13:10:43
-
>ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
>を実行したことで使用出来なくなってしまったようです。
>対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
>削除して回るのも非現実的です。
>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?
自分で何言ってるか分かってる?
- 547 :545:2009/10/31(土) 15:21:48
- >546
失礼しました。
>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?
MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン
トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど
をインストールしなくても使用できる方法はないでしょうか?
(MS系の更新インストールや代替コントロールのインストールは可)
WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け
たいのですが、今から作るのであればコントロールではなくWinAPIで行う
べきでしょうか?
よろしくお願いします。
- 548 :デフォルトの名無しさん:2009/10/31(土) 19:18:22
- MSCommを使いたいなら対策は「ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)」を削除
- 549 :デフォルトの名無しさん:2009/10/31(土) 19:33:45
- セキュリティパックとは、古く多少リスキーでありながらも
公開されていたDLLとかの機能を殺してしまってモノシリッ
ク化しつつある疑似カーネル群のコードを間接的に使うように
することだったんでつね
- 550 :デフォルトの名無しさん:2009/11/02(月) 11:29:29
- >>545
ttp://ziddy.japan.zdnet.com/qa5065179.html
これはどう?
- 551 :545:2009/11/02(月) 22:21:47
- >550
ありがとうございます。
投稿前にこれも試したのですがVB6が入ってないから
ダメと言われました。
WinAPIに挑戦してみます。
ありがとうございました。
- 552 :デフォルトの名無しさん:2009/11/03(火) 05:55:57
- >>551
EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。
- 553 :デフォルトの名無しさん:2009/11/03(火) 13:19:49
- >>551
VB6のSP6のruntimeのみってvectorとかに無い?
#自分はsp5の使ってるけど
- 554 :デフォルトの名無しさん:2009/11/03(火) 13:36:56
- Vector のダウンロード数が一番になってるランタイムって、
コメント読んだらシステム破壊の事が書かれてて怖いわw
俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。
ttp://www.hmpage.jp/vb6rtest.htm
セットアップがVB6のプロジェクトのタイプなので、インストール後に
アンインストールして、ライブラリ類は全残しでいけた。
- 555 :デフォルトの名無しさん:2009/11/03(火) 14:58:37
- Frameworkさえいれておけば.NETの機能って使えるんだな
最近知ったけどStringBuilderとか使えて便利だ
- 556 :デフォルトの名無しさん:2009/11/03(火) 15:35:51
- >>555
知らんかった・・・・・
#まともなhash使えるとかなりうれしいなぁ
- 557 :デフォルトの名無しさん:2009/11/04(水) 21:19:25
- AOD.NET って使える?
- 558 :557:2009/11/04(水) 21:20:45
- 訂正
ADO.NET
- 559 :デフォルトの名無しさん:2009/11/04(水) 22:32:00
- VBAで使えるのはADOであってADO.NETは使えないんじゃなかった?
俺は2007だけどADOでアクセス(という言い方でいいか)してる。
- 560 :デフォルトの名無しさん:2009/11/04(水) 23:40:03
- CreateObjectでインスタンスを無理やり生成してやれば使えるんじゃね
まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい
- 561 :デフォルトの名無しさん:2009/11/07(土) 09:08:12
- 以前お世話になりました270です。
ネット検索で検索ヒット件数を取得し
A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、
グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、
送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに
つなげるかもわからない)みたいなのですが、
この送信ワード http://yahoo.co.jp/search??????? %5%6
とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう
か?
- 562 :デフォルトの名無しさん:2009/11/07(土) 09:13:04
- アタックはやめろ
- 563 :デフォルトの名無しさん:2009/11/07(土) 09:39:23
- yahooのデベロッパーのサイトでは一日5万まで使って開発してくれ
というのです。別段500でもいいから自動化させたいのですが・・・
そこには例文がなくて・・・どこかにフォーラムでもないでしょうか?
http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html
- 564 :デフォルトの名無しさん:2009/11/07(土) 11:05:12
- Yahoo! JAPAN Web APIはあきらかにスレ違い
- 565 :デフォルトの名無しさん:2009/11/07(土) 17:28:03
- excel vbaで他のブックのセルデータを参照するにはどうすればよいの?
- 566 :デフォルトの名無しさん:2009/11/07(土) 17:30:07
- 上、ちなみにexcel2003です。
Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate
これをやっても、インデックスが有効範囲にありませんが出ます。
どなたかお願いします。
- 567 :デフォルトの名無しさん:2009/11/07(土) 18:13:11
- フォームのTextboxにドラック&ドロップで任意の列データを持ってくることはできますか?
やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。
- 568 :デフォルトの名無しさん:2009/11/07(土) 20:06:01
- >565-567
つマクロの記録
- 569 :デフォルトの名無しさん:2009/11/08(日) 00:28:16
- B列に1万近くの数値があり、そこから特定の範囲(例えば100〜101など)に適した数値を
指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、
どのようにしたらよいでしょうか?
Excel2003です
- 570 :デフォルトの名無しさん:2009/11/08(日) 00:32:48
- VBAでRSSの読み込みって出来ますか?
- 571 :デフォルトの名無しさん:2009/11/08(日) 09:22:15
- >>570
こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば
よっぽど早く結果に到達できますよ。その上でわからないことを
質問したほうが効率的では?
- 572 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 11:14:38
- >574
どっかのセルに実行済みをセットすれば?
- 576 :デフォルトの名無しさん:2009/11/08(日) 12:57:57
- >>574
Application.EnableEventsを使うが、実用になるChangeイベントを書くのはかなり難しいよ。
あきらめた方がいいと思うな。
真っ先に考えられる不具合は消した場合でも1になったりすることだな。
問題はこれだけじゃないからかなり難解。
- 577 :デフォルトの名無しさん:2009/11/08(日) 13:35:30
- >>575-576
どもです。そもそも無茶なことか・・・
初心者ゆえに「出来る・出来ない」が良くわからない
ありがとでした
- 578 :デフォルトの名無しさん:2009/11/08(日) 14:05:32
- staticでも使え
- 579 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 17:44:47
- イベントループ拾わんといかんだろ
- 581 :デフォルトの名無しさん:2009/11/08(日) 17:45:47
- C言語側で扱うためのバイナリファイルをVBAで出力していて
整数値は除算や剰余算を用いてバイト型配列に代入して出力しているのですが、
浮動小数値(単精度)をバイト型配列に含める場合にどう処理すればいいのか分からず困っています。
良い解決策をご教授頂ければ助かります。
- 582 :デフォルトの名無しさん:2009/11/08(日) 18:10:19
- ttp://program.station.ez-net.jp/special/vc/atl-com/variant.asp
ttp://www.hi-ho.ne.jp/babaq/bstr.html
ttp://piza.2ch.net/log/prog/kako/947/947909317.html
http://support.microsoft.com/kb/167668/en-us/
- 583 :デフォルトの名無しさん:2009/11/08(日) 22:34:13
- >>581
配列に入れる理由がファィル出力のためだけなら、いちいち配列など使わずに
ファイルをBynaryモードで開いて整数も実数もそのまま出力してしまえばいい。
ただし、実数の内部表現が異なる場合は使えない。
どうしてもVBAの中で1バイトずつ取り出す必要があるなら、
Win32APIのMoveMemoryを使うぐらいしか方法がない。
- 584 :デフォルトの名無しさん:2009/11/09(月) 20:42:51
- #ファイル番号 でファイルにバイナリアクセスしている時に、
ストリーム位置を取得する方法を教えてください。
(Cのftell()相当の操作)
- 585 :584:2009/11/09(月) 21:06:44
- 自己解決しました。
Seek( ファイル番号 ) で取得できました。
- 586 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/10(火) 23:44:43
- http://b.hatena.ne.jp/articles/200911/553
会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま
- 588 :デフォルトの名無しさん:2009/11/10(火) 23:48:02
- マクロを組むのはズルじゃないが
他人が作ったマクロを勝手に使って
仕事を早く終わらせるのはズルだと思う
少しはリスペクトなりインセンティブなり気を使えと
- 589 :デフォルトの名無しさん:2009/11/11(水) 15:13:14
- その理屈でいくとPCも電卓もせめて一度は作ってから使えということになるが
- 590 :デフォルトの名無しさん:2009/11/11(水) 15:25:27
- その理屈でいくと家も会社もせめて一度は作ってから住め(従事)ということになるが
- 591 :デフォルトの名無しさん:2009/11/11(水) 22:10:44
- シート2の表を、シフト+編集で図のコピーを行い、シート1に貼るマクロを組みましたが、
そのシート1の貼りつけた図のコピーを切り取るマクロを組むと、ピクチャー番号が異なるために、できません。どうすれば、解決できますか?
- 592 :デフォルトの名無しさん:2009/11/11(水) 22:21:57
- 以下のような動作をするマクロって、VBAで作成できますか?
(実現可能性だけ教えて頂ければ、自力でどうにかしたいと思います)
・処理内容
Outlook2007で、
特定の件名がついたメールは、メール内容表示の際にボタンを出現させて、
ボタンを押すことでExcel2007にメールの内容を転記させる。
例えば、以下のような感じです。
■Outlook
件名:○○見積書
メール内容:
○○費 \50000
△△費 \100000
―――-
|ボタン|←ポチっとな
―――-
■Excel
A1セル:○○費
A2セル:\50000
B1セル:△△費
B2セル:\100000
が転記される
- 593 :デフォルトの名無しさん:2009/11/12(木) 00:23:58
- できるっちゃできる
- 594 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/12(木) 20:10:08
- 知らんがな(´・ω・`)
- 597 :デフォルトの名無しさん:2009/11/12(木) 20:32:33
- "C:\Documents and Settings\データ\_" & i & ".txt"
としてやらんといかんのとちゃうかな
- 598 :デフォルトの名無しさん:2009/11/12(木) 20:34:03
- >595
データさんか?
普通はそこにアカウント名が入るんだが。
まさかとは思うがi.txtのiって・・・w
- 599 :デフォルトの名無しさん:2009/11/12(木) 21:00:42
- >>このプログラムの目的は、テキストデータの入っているフォルダを
>>他の名前に変更したときも、その中に入っているテキストデータ10個を
>>エクセルで展開するためです。
(・ω・`)???
- 600 :595:2009/11/12(木) 21:12:37
- みなさんアドバイス感謝です!
説明不足ですみません。
質問ではテキストデータと書きましたが、.datで保存されています。
フォルダの中に「_0.dat」「_1.dat」「_2.dat」…というデータが10個あります。
ほんとは10個開きたいのですが、とりあえず5個開けたら5を10に直せばいいかなと
思ってます。
>>597さん
\データ\_"&i&".dat"としましたが、コンパイルエラーになります。
dat形式のデータは無理なのでしょうか?
- 601 :デフォルトの名無しさん:2009/11/12(木) 21:18:41
- "C:\Documents and Settings\データ\_" & i & ".txt" _
死ね >>600
- 602 :デフォルトの名無しさん:2009/11/12(木) 23:40:30
- 597見てダメなら何聞いてもダメだろ
スペルミスとかスペース抜けとかで質問されても困る
- 603 :デフォルトの名無しさん:2009/11/12(木) 23:56:23
- Range("G1").Select の
1をfor文使って
1〜100までするにはどうすればいいでしょうか?
For n = 1 To 100
Range("D&n&").Select
だとエラーになります
- 604 :デフォルトの名無しさん:2009/11/12(木) 23:59:00
- ↑
Range("G1").Select ×
Range("D1").Select ○
- 605 :デフォルトの名無しさん:2009/11/13(金) 00:00:00
- Range("D" & n).Select
あるいは
Cells(n, 4).Select
- 606 :デフォルトの名無しさん:2009/11/13(金) 00:06:08
- >>595と>>603は同じヤツか?
根本的に・・・
- 607 :デフォルトの名無しさん:2009/11/13(金) 00:09:35
- ActiveCell.FormulaR1C1 = "=-(R[+&n]C[-2]-R[-4]C[-2])"
R[+&n]を引数にする場合はどうでしょうか?
- 608 :デフォルトの名無しさん:2009/11/13(金) 00:49:12
- もはやネタだろ
- 609 :デフォルトの名無しさん:2009/11/13(金) 00:53:26
- ネタじゃないです><
ActiveCell.FormulaR1C1 = "=-R["&n&"]C[-2]-R[-4]C[-2]"
とかやってみたんですがダメでした
- 610 :デフォルトの名無しさん:2009/11/13(金) 01:02:20
- 寝たとしてもまったく面白くない
もっと回答したくなるように質問しろ
- 611 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/13(金) 10:51:53
- 変数使ってセル座標の指定するなら、cells使った方が楽だと思ってる。
- 613 :デフォルトの名無しさん:2009/11/13(金) 10:57:30
- その方が速い
- 614 :デフォルトの名無しさん:2009/11/13(金) 14:43:25
- すまんが教えてください
vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。
ExecWBでやってみたけど上手く行かなかった。
SendKeysもいまいちだったし、出来るならやりたくない(違う作業が出来なくなるため)
やり方に問題があるのか、違う方法があるのか?
教えてください。
- 615 :デフォルトの名無しさん:2009/11/13(金) 18:44:29
- ・自分に何かしら不幸な出来事が起きたとき、落ち込んでしまうのは仕方のない話。ショックが大きいほど、
人前に姿をさらすのも苦痛になるものだが、そういうときの行動こそ、人間の大きさが見えるものかもしれない。
米シカゴに住む34歳のティアン・ハリスさんは、 10月31日に幸せな花嫁となる予定が、6日前になって相手の
男性から突然結婚の中止を告げられてしまった。式直前でのまさかの事態だが、さらなる追い打ちを
かけられてしまう。慌てて母親と一緒にパーティー会場にキャンセルを申し出ると、もう返金は不可能と
言われたそう。駐車場に座り込み落ち込むハリスさんと、なす術もなく見守る母親。そのとき、向かいに
あった老人ホームを目にして良いことを思いついた。
どうせ無駄にするならと、2人は向かいの老人ホームの人たちとパーティーを開こうと決断する。
「寄付をしたい」とハリスさんが飛び込んだ老人ホームの施設長は、「彼女はここにいる誰も知らないだろうし、
そんなオファーも受けたことない」(米紙ニューヨーク・デイリーニュースより)と驚いた。かくして、ハリスさんの結婚パーティーは、
老人ホームのハロウィンパーティーへと変更。お年寄りたちも、思いもよらぬイベントを大いに喜んだという。
300人近いお年寄りは思い思いに仮装して、ダンスに興じた。あるお年寄りは「とても楽しい時間だった」
(米放送局CBSより)と語り、老人ホームに素敵なひとときをもたらしたハリスさんに感謝している。施設長も
「彼女はどこからともなくやってきて、私たちに美しいパーティーを与えてくれた天使」とハリスさんを讃えた。
会場の傍らでお年寄りの笑顔を見て満足したというハリスさんだが、本当なら自分が主役になるはず
だったパーティーにやはり心境は複雑だったよう。母親も「会場で、皆さんの前にいるのが娘だったら
よかった」と無念さを語り、施設長も「彼女は落ち込んでいたと思う」とハリスさんの心中を慮った。
しかし、そうした中でもお年寄りたちに幸せな時間を与えたハリスさんの人柄に、施設長は「神は彼女を祝福し、
きっとほかに良い人を見つけられる」と太鼓判を押す。
ハリスさんは11月2日に、新婚旅行となるはずだったハワイへ1人で旅立ったそう。花嫁になり損ねてしまった
ハリスさんだが、彼女が取った決断が多くの人に幸せを与えただけでなく、少なからず自分への励みに
なったことを願いたい。(抜粋)
http://www.narinari.com/Nd/20091112560.html
- 616 :デフォルトの名無しさん:2009/11/13(金) 18:49:15
- なげーよ 2行でギブw
- 617 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/13(金) 21:27:48
- Sub 印刷()
Worksheets("文書").PrintOut pages:=2,5,7
End Sub
- 619 :あ:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/13(金) 22:27:52
- ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ
- 622 :デフォルトの名無しさん:2009/11/13(金) 22:57:12
- >>619
カウンタ変数(i)をForループの中で書き換えるのは可能な限り避けた方がイイ
何回回ったかわかんなくなっちゃうよ
- 623 :デフォルトの名無しさん:2009/11/14(土) 00:02:36
- 【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]
http://namidame.2ch.net/test/read.cgi/hidari/1257990721/
- 624 :デフォルトの名無しさん:2009/11/14(土) 00:51:45
- >>620
Dim Arow As Longに突っ込めよ
- 625 :デフォルトの名無しさん:2009/11/14(土) 04:51:06
- e = "& mi &" + 5 * "& c &" - 5
mi、c は変数です。
何がいけないのでしょうか?
- 626 :デフォルトの名無しさん:2009/11/14(土) 05:13:52
- お前は2chに書き込んではいけない
- 627 :デフォルトの名無しさん:2009/11/14(土) 07:43:48
- e = mi + 5 * c - 5
じゃダメなの?
変数が文字列の中に含まれちゃってるよ。
ただのmiって文字列としか認識されない。
- 628 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/14(土) 09:49:32
- Arow ってなんだ
- 630 :デフォルトの名無しさん:2009/11/14(土) 10:04:03
- 正解(>>620-621)が出た後にボケ回答(>>622 >>628)が出てくる、の法則
- 631 :デフォルトの名無しさん:2009/11/14(土) 10:12:07
- 自分よりいい答えが出たのがそんなに悔しかったのか
- 632 :デフォルトの名無しさん:2009/11/14(土) 10:15:19
- (;゚д゚)ァ
- 633 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/14(土) 10:50:58
- ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ
- 635 :デフォルトの名無しさん:2009/11/14(土) 11:01:07
- .Formular1c1="=Average(R["& c &"]C["& d &"]:R["& c+2 &"]C["& d+2 &"])"
のようにRCの中に変数を入れたい場合はどうすればいいのでしょうか?
アドバイスお願いします
- 636 :デフォルトの名無しさん:2009/11/14(土) 11:07:03
- 馬鹿発見
- 637 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/15(日) 01:45:55
- RAND()で適当な番号をふって並び替えて上から20問をつかう
- 639 :デフォルトの名無しさん:2009/11/15(日) 13:25:55
- >>618
ありがとうございます!
助かりました。
- 640 :637です:2009/11/16(月) 00:26:37
- >>638
マクロを具体的にどう変更したらいいかおしえてください…
- 641 :デフォルトの名無しさん:2009/11/16(月) 08:16:40
- >>640
例えば、D列に乱数で適当な数字を振る
D列を見て数の大きい順に20問を出題する
そこまで自分で作ったのなら、これくらいできるだろ?
宿題なら自分でどうぞ
- 642 :デフォルトの名無しさん:2009/11/16(月) 11:18:19
- マクロが
A
B
C
D
こうあったとして、全てのマクロを実行するマクロを作るにはどうやったらいいですか?
- 643 :デフォルトの名無しさん:2009/11/16(月) 11:26:37
- 全てのマクロを呼び出すマクロを作ればいいだけだろ
- 644 :デフォルトの名無しさん:2009/11/16(月) 16:52:03
- Sub all_execute()
A
B
C
D
End SUb
wwww
- 645 :デフォルトの名無しさん:2009/11/16(月) 20:20:05
- 私は基本C/C++のPGです。業務でVBAの面倒を見ることになりそうなんですが、
言語仕様がコンパクトにまとまってるような本はないでしょうか?
VBAの仕様なんてたかが知れてるかもしれませんが、分厚い本やWEBサイトをいったりきたりするのは面倒だし
言語に自分の知らない部分があるというのが気持ち悪い性分なので、まとまってる本を探しています(WEBでもいいのですが)
・プログラミングの知識前提で、
・ペラッペラの単色刷りで
・言語使用だけは満足してる
オライリーのクイックリファレンスのVBA版みたいなのが理想です(探したけどなかった)。
VBAの解説本だとプログラミング未経験者向けの、カラフルで妙に分厚い本が多いような気がするのですが
私としてはクイックリファレンス的な本が理想なので…
お勧めの本などあれば教えてください。
- 646 :デフォルトの名無しさん:2009/11/16(月) 22:17:54
- VBA辞典
- 647 :デフォルトの名無しさん:2009/11/16(月) 22:23:14
- >>645
マジレスだけどリファレンスとしてはオンラインヘルプ一択
結局ヘルプ以上にならないから初心者向けの分厚いカラー刷りになる
紙がよければ死ぬ気で全部印刷
- 648 :637です:2009/11/17(火) 00:26:19
- >>641
RAND()で、
B列とC列のくみあわせは変わってしまうことは無いのですか?
- 649 :デフォルトの名無しさん:2009/11/17(火) 00:28:24
- >>648
ここはマ板ですよ?
- 650 :637です:2009/11/17(火) 00:38:30
- >>649
死ねクズ
- 651 :デフォルトの名無しさん:2009/11/17(火) 00:39:17
- >>648
おまえの前にある箱の向こうにも人がいるんだぜ
>>638 も >>641 も的確な回答してるじゃん
それに対して、あーじゃない、こーじゃない、って・・・
更に質問するんだったら
ありがとう御座います。ヒントを基に組んでみたら、こんな動作をしました。
ここが怪しいと思うので、調べたり試行錯誤したのですが、こんなエラーが出てしまいます。
何かアドバイス頂けないでしょうか?
くらい書いたほうがいんでね?
なんとなくムカつく文章だったので勢いで書いた
- 652 :デフォルトの名無しさん:2009/11/17(火) 00:56:42
- 的確?
- 653 :デフォルトの名無しさん:2009/11/17(火) 01:01:43
- >>652
的確だと思うぞ。
- 654 :デフォルトの名無しさん:2009/11/17(火) 08:15:19
- >>653
俺も的確だと思うけどな。
質問する側のレベルが低いんだろw
- 655 :デフォルトの名無しさん:2009/11/17(火) 08:40:16
- おまいらココ逝って正しいRANDの使い方教えてきやがれ
http://www.nicovideo.jp/watch/sm8517855
- 656 :デフォルトの名無しさん:2009/11/17(火) 09:03:50
- 【社会】スーパーコンピュータ向け「Excel」開発中 - Microsoft
http://tsushima.2ch.net/test/read.cgi/newsplus/1258414484/
- 657 :デフォルトの名無しさん:2009/11/17(火) 11:57:24
- A2〜A20000ぐらいまで誕生日(シリアル値)が入っています
B列に年齢を出したいときは、どういう計算をすれば軽くなるでしょうか?
古いPC(win95)なのでものすごく時間がかかっています
他のマクロでも応用したいので、教えてください
お願いします!
- 658 :デフォルトの名無しさん:2009/11/17(火) 17:49:46
- 関数にdatedifってのが有るから
=DATEDIF(A2,TODAY(),"y")
で済むと思うけど、どうしてもVBA上から使いたいならworksheetfunctionを付ければ?
- 659 :デフォルトの名無しさん:2009/11/17(火) 19:25:58
- ワークシートに関数を沢山入れると重くなる、という意味に解釈して
VBAにて
Range("B2").Value = DateDiff("yyyy", Range("A2").Value, Now)
を必要行だけ繰り返す
- 660 :デフォルトの名無しさん:2009/11/17(火) 19:54:25
- >>643-644
単純に考えればいいってことがわかった気がする
どうも
- 661 :デフォルトの名無しさん:2009/11/17(火) 22:22:18
- >>660
他のファイルとかに書いてあるのを呼ぶときはスコープが問題になることがあるから気をつけてね
Public宣言付けたり、参照設定したりとか
- 662 :デフォルトの名無しさん:2009/11/18(水) 09:58:30
- ハイパーリンクに関する質問です。
例えばセルA1に何か文字列が入っている状態で
セルA2に以下のシート関数が入っているとします。
=IF(A1="","",HYPERLINK("http://www.yahoo.co.jp/","Yahoo"))
そうすると、セルA2には"Yahoo"の文字列が表示され
"http://www.yahoo.co.jp/"へのリンクが張られている状態です。
ここで、VBAにより、リンク先である"http://www.yahoo.co.jp/"の文字列を
取得する方法はあるのでしょうか?
セルA2に設定されている関数の文字列を解析するという手もあるとは思いますが、
それ以外で方法はあるのでしょうか?
- 663 :デフォルトの名無しさん:2009/11/18(水) 14:09:25
- あるんじゃない
- 664 :デフォルトの名無しさん:2009/11/18(水) 14:14:34
- >>658-659
とてつもなく軽くなりました、ありがとうございました!
- 665 :デフォルトの名無しさん:2009/11/18(水) 16:45:42
- >>664
>>658の数式でも軽くなったの?
もし重かったら揮発性関数のTODAY()のせいだな。
どこかのセル、たとえばF1にCtrl + ;で今日の日付を求めて
=DATEDIF(A2,$F$1,"Y")とすれば数式でも軽くなるかもよ。
- 666 :デフォルトの名無しさん:2009/11/18(水) 22:41:02
- 1日か31日までの1ヶ月分のシートがあるとします
それぞれのA1セルに日付をいれてます
この1ヶ月分のシートの月曜日と火曜日だけを対象してなんらかの処理を行いたいときはどのような方法を取ればいいでしょう?
よろしくお願いします
- 667 :デフォルトの名無しさん:2009/11/18(水) 23:30:02
- 1日か31日までってことは
1日の場合は前月の2日から一か月分って言う意味?
- 668 :デフォルトの名無しさん:2009/11/18(水) 23:32:15
- >>666
for each collectionでシートに対してループ回して
その中でA1セルを調べて、曜日をチェック
で、なんらかの処理を行えばOK
- 669 :666:2009/11/18(水) 23:36:40
- 失礼しました
1日から31日までの31シートです
>>66
ぐぐってみます8
- 670 :デフォルトの名無しさん:2009/11/19(木) 09:19:43
- ワード・アクセスのVBAスレってありませんか?
- 671 :デフォルトの名無しさん:2009/11/19(木) 09:24:37
- http://pc12.2ch.net/test/read.cgi/tech/1170492587/
http://pc12.2ch.net/test/read.cgi/tech/1243095768/
http://pc12.2ch.net/test/read.cgi/tech/1168427595/
http://pc12.2ch.net/test/read.cgi/tech/1242136180/
- 672 :デフォルトの名無しさん:2009/11/19(木) 11:42:02
- ありがとうございます
検索しにくいっす・・
- 673 :デフォルトの名無しさん:2009/11/19(木) 19:46:28
- WordのVBAはどういうときに使うんだ?
- 674 :デフォルトの名無しさん:2009/11/19(木) 20:13:37
- 時節柄考えられるのは
年賀状宛名流し込み印刷かな
- 675 :デフォルトの名無しさん:2009/11/19(木) 20:27:20
- それVBAいらないやん
- 676 :デフォルトの名無しさん:2009/11/19(木) 21:46:41
- 差し込み印刷なんかExcel VBAでも同等のことするの簡単だよな。
- 677 :デフォルトの名無しさん:2009/11/19(木) 21:49:26
- A1セルに1月1日(月)のように入力しています
ここから特定の曜日(火曜日と日曜日など)を区別して処理をおこないたいのですが
どのような方法を取ればよいのかご教授ねがいます
- 678 :デフォルトの名無しさん:2009/11/19(木) 22:10:09
- >>677
おまえ666だろ
曜日を調べる関数を使う
関数名は自分で調べろ
以上
- 679 :デフォルトの名無しさん:2009/11/19(木) 22:43:03
- そもそも1月1日(月)って入力するのが間違いだ罠。
1/1と入力して表示形式をm月d日(aaa)にするだけだ。
- 680 :デフォルトの名無しさん:2009/11/20(金) 05:56:15
- 質問
教えてえろい人
エクセルのVBAを使って、Outlookメールを複数の人に自動送信操作をさせたいです。
Aさん(○○○@○○.co.jp)にエクセルSheet1に記載された内容を送信し、
Bさん(XXX@XX.ac.jp)にエクセルSheet2に記載された内容を送信します。
後、CさんにエクセルSheet3を・・・という具合に・・・
以上の事が、エクセルVBAを使って1回だけマクロを走らせるだけで、できるでしょうか?
- 681 :デフォルトの名無しさん:2009/11/20(金) 07:34:40
- ユーザーフォームのlistviewについて質問です
listviewで縦横のスクロールバーのやり方が分からないのですが
どうすればうまくいくでしょうか?
- 682 :デフォルトの名無しさん:2009/11/20(金) 11:22:46
- >>680
できるでしょうね
- 683 :デフォルトの名無しさん:2009/11/20(金) 11:48:16
- てst
- 684 :デフォルトの名無しさん:2009/11/20(金) 21:52:10
- >>680
ExcelのよりOutlookのVBA使ったらどうよ?
- 685 :デフォルトの名無しさん:2009/11/20(金) 22:27:51
- 同一セル内の数字を下のように並べかえたいのですがどうすればいいですか?
「333 「111
111 ⇒ 333
555」 555」
3桁ずつ切り分けて別セルに出力、ソートをかけて並べかえるというものは
出来たのですが、出来ればマクロの中だけで処理をしたいんです。
- 686 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/20(金) 23:18:42
- すいません・・・。
モーグで質問しようとして準備していた文書を張ってしまいました。
ちなみにマルチポストではありませんので、よろしくお願いします。
- 690 :デフォルトの名無しさん:2009/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:2009/11/21(土) 08:37:43
- >>690
レスありがとうございました。
やはりVBSのオブジェクトですし、VBAのsplitが対応してないのは頷けます。
ソース例の提示、ありがとうございました。
自作関数で対応しようと思います。
重ね重ねありがとうございました。
- 692 :デフォルトの名無しさん:2009/11/21(土) 10:02:39
- excel2007
ブックに変更が有った時に保存するようにしたいのですが、変更が有ったか無かったかのチェックって
どうするのでしょうか?
保存するのはThiworkbookの閉じる時で
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
の中に入れれば良いのでしょうけれど。
- 693 :デフォルトの名無しさん:2009/11/21(土) 11:15:06
- >>692
If WorkBook.Saved = False Then
'保存処理
End If
- 694 :デフォルトの名無しさん:2009/11/21(土) 11:21:38
- >>693
thxです!
- 695 :デフォルトの名無しさん:2009/11/21(土) 12:50:52
- WinVista-Excel2007
VBAでなくActiveXの問題かもしれませんが
VBAの編集中に起きた問題なのでコチラで。
先にActiveXのボタンを配置しVBAで記述したSub{}を実行するという簡単なものを複数作成していたのですが
5・6個作り終えいざ実行してみようとボタンを配置してあるワークシートを開こうとしたところ
ボタンは表示されずエラー(特定のエラー名表示されず)が起きExcelが強制終了してしまいます。
また新規作成でActiveXのボタンを新たに配置しようとしても同じ現象が起こりました。
アドインも複数導入している状態のためもしかするとVBAの可能性も捨てきれないのではと質問させて頂きました。
対処法・解決策はございますでしょうか?
宜しくお願いいたします。
- 696 :デフォルトの名無しさん:2009/11/21(土) 13:18:23
- >>695
俺は何に原因がわかるかは知らないし、
ActiveXに関係ない話だが俺の話を聞いてくれ
Excel VBAでプログラム作ったんだよ。
クラスとかwitheventsとか使ってね。
そしたらなぜかExcelが強制終了するんだよw
いや、しないときもある。するときもある。
自分のマシンでは強制終了するのに、他のマシンでは動くとか
新しくExcel作ってソース全部移植したら直るんだよ。
でもしばらくするとまた強制終了するようになるんさよ。
原因さっぱりわかんねw
俺は思ったね。Excelで無理しちゃいけねぇ。
単純なマクロ程度で終わらせておくべきだって。
- 697 :デフォルトの名無しさん:2009/11/21(土) 13:42:52
- >>695
起動時に強制終了するアドインでも作ったんじゃね?
- 698 :デフォルトの名無しさん:2009/11/21(土) 14:51:42
- >696
わかる
- 699 :685:2009/11/21(土) 15:14:26
- >>686
出来ました。
ありがとうございました。
- 700 :デフォルトの名無しさん:2009/11/21(土) 16:15:33
- パチンコ店 ATM8000台 IIJ社 今後4、5年で全国に
http://www.jcp.or.jp/akahata/aik09/2009-11-14/2009111401_04_1.html
2chとパチンコ屋が無くなれば日本の景気は上向くかもな
- 701 :デフォルトの名無しさん:2009/11/21(土) 18:55:37
- >>695 >>696
俺も似たような現象で悩んでいる。
アドイン複数入れて、VBAでプログラム作って2〜3回動かすのには問題ないんだが
しばらく使ってExcelを終了させると、
「問題が発生したため、Microsoft Office Excelを終了します。ご不便をおかけして申し訳ありません。」
とかいうふざけたエラーが出てくる。
俺の記憶が確かなら、
グローバル変数とか配列を大量に使いだした辺りでぶっ壊れた気がする。
メモリを開放しなきゃいけないとか、そういうことなのか???
- 702 :デフォルトの名無しさん:2009/11/21(土) 19:05:46
- エクセルのブック自体が変なメモリリークをしてぶっ壊れるってのをよく聞くぜ。
- 703 :デフォルトの名無しさん:2009/11/22(日) 00:08:50
- >>680
MSのサイトにoutlook使ったメール送信のサンプル見つかると思うから
それを参考にしたら?
Accessに取り込んだ内容を登録したメアドにoutlook使って送信するPG
を昔作ったことがあるから、出来るはずだよ
ウイルス対策用(だろうなぁ・・)で1通単位でダイアログ押という仕様の
回避用のexeも見つかると思うから探してくれい
197 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
Excel総合相談所 88 [ビジネスsoft]
Windows98を使い続けるよ Part14 [Windows]
老符「東方シリーズ総合スレッド 6128/6128」 [ゲームサロン]
WindowsXP質問スレ 203ページ目 [Windows]
何でもかんでもExcelで資料作る奴 [ビジネスsoft]
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)