Excel VBA質問スレ Part8
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/08/25(月) 23:16:33前スレ http://pc11.2ch.net/test/read.cgi/tech/1212587819/
★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)
0409デフォルトの名無しさん
2008/10/04(土) 01:25:38その情報だけだと使えそうな手段は2つくらいしか思いつかない
1.VBAで表をまとめてLOOKUP
2.VBAで該当する値を直接取りにいく
>一度一つのファイルにまとめて入力後またばらしてもいいのですが
何がしたいのかよく分からないw
>ファイルを開けて手入力する
これは目視で値を確認していって該当する値を移すってことでしょうか?
>多くて40ファイルです
40ファイル見るだけなのかすべて更新するのかどちらでしょうか・・・
0410デフォルトの名無しさん
2008/10/04(土) 01:47:52おそらくあまりに初級なので難しく捕らえていらっしゃるかもしれません
見に行く表にはA列に番号(12桁)B列にも番号(9桁)がありこれが多くても40種の意味です。重複はしていない番号ばかりです
そしてA列の番号がファイル名にもなっている1枚シートしかないファイルのセルA4に先程の12桁が入っているがセルA6に今までは手入力で9桁番号を入れていました
目視です。一応FIND窓で捜しはします…
独立させずシートとしてまとめたら一度に処理できるかと考えたのですが、、
0411デフォルトの名無しさん
2008/10/04(土) 02:00:03なお40種は40行の意味です
0412デフォルトの名無しさん
2008/10/05(日) 09:52:11横レスします。
状況を私なりに解釈し、不足するところをおたずねします。
1 参照元ファイル(以下ブックと呼びます)は最大40個ある
(408の下から2行目の記述から)
2 参照元ブックにはそれぞれ40行×2列(A列、B列)のデータがある
(410の上から3行目の記述と411の「40種は40行」の記述から)
3 (結果を求める)作業用ブックのA4セルに12桁の番号が入っている
(410の上から4行目の記述)
4 作業用ブックのA6セルには今まで9桁番号を手入力していたが → これを自動で表示させたいってこと?
質問
Q1 上の解釈でいいんでしょうか?
Q2 40個のブックはそれぞれシートは何枚ですか? 1枚ずつだったら40シートの1ブックにまとめられませんか?
0413デフォルトの名無しさん
2008/10/05(日) 12:46:49まず参照元と作業用の違いを私自身があまりわかってないかもしれません。携帯からのカキコで字数が限られ申し訳ないです(>_<)
@A→参照する表は1ブックでそこに多くて40行2列、少ない時は10行2列くらいの表が1シートだけに表記してあります
BC→OKです
Q2→確かにひとつのブックにまとめればいいのですが、保存が1ブック1シートでないといけないのです(請求書みたいな感じ)
なおかつそのブック名もセルA4の番号をつけないといけません
15ブックくらいなら目視&手入力でもいけますが日によって30-40ブックとなると間違いや画面の一杯さで
頭がくらくらしてしまい、楽な方法がないかとお尋ねしてみました
まだ言葉足らずかと思いますがどうぞよろしくお願いいたします
0414デフォルトの名無しさん
2008/10/05(日) 14:25:37やりたいことの自分なりの稚拙な解決方法を思いつくのだが、その具体的なやり方がわからずに
ぐだぐだと質問&回答を続ける。
良い質問方法:
やりたいことをまず具体的に書く。やりたいことというのは、ユーザレベルでの話し。
0415デフォルトの名無しさん
2008/10/05(日) 15:03:16やりたい事は毎日新たに発生するブックのセルA6に、セルA4に対応した9桁の番号を拾ってきて自動入力し保存するという事です
セルA4に対応した番号は他のブックに見に行きます
この表現ではどうでしょうか? あまりに簡単な作業かもしれませんが良い方法があればよろしくお願いします
0416デフォルトの名無しさん
2008/10/05(日) 16:11:49商品マスタ(Product.xls)と注文ブック(Order.xls)ということにして、仕様を書いてみた。
[前提]
1.Product.xlsのSheet1のA:B列に何らかのデータが入力されている
2.毎日Excel Bookが40ファイル程度できる
3.そのBook名は[12桁の文字列].xls(以降、Order Bookと表記)
4.Order Bookには1シート(以降、Orderシート)しか存在せず、そのシートのA4には[12桁の文字列]が設定されている
[やること]
1.毎日発生するOrder BookのOrderシートのA6に、Product.xlsから取得したデータを設定し上書き保存する
2.データの取得方法は、Product.xlsのSheet1!A列の中から、[12桁の文字列]を探し、適合する
行が合った場合は対応するB列の値を持ってくる
[異常処理]
1.Order Book名とA4の内容が異なる場合は***する
2.[12桁の文字列]が見つからなかった場合は***する
[疑問]
>多くて40行2列、少ない時は10行2列
これはどのタイミングでどのような理由で変更されるのか?
0417デフォルトの名無しさん
2008/10/05(日) 16:16:17お前が超絶難しいと思ってるものでも、ソルバ一発で解決できる類の問題もあれば、
単純作業を自動化するだけなのに、プログラム的にはすげー面倒な場合もある。
0418デフォルトの名無しさん
2008/10/05(日) 17:42:54それで1点、OrderBook名には「請求書M...」みたいにセルA4に日本語が3文字ついていたかもしれません
また、10コか40コかはメール受信によって左右されます。メールの添付をどこかのフォルダに保存し何等かのマクロを実行するとよそにそれに対応した9桁の番号が、
検索されるのか作成されるのかするのでそれを本日分として拾ってくるわけです。でセルA6は空白なので入力して完成させる…
自分は記録マクロしかできないのですが、もし自分がVBAに詳しければ@OrderBookのシート1を一つのブックにまとめる
AProductシートもそこに挿入BVlookupでセルA6に値入力Cシートをばらして保存
とかが簡単に出来るのかな?のイメージでした;ω;
スミマセン
0419412
2008/10/05(日) 17:49:34もう一回自分なりに解釈したものを書きます。
1 参照元ブック(1シート)は日々内容が変わるけど、A列、B列にデータが記録されている。
(内容が固定されていないということは413の「多くて40行2列、少ない時は10行2列くらいの表が」から推測)
2 結果を求める(作業用)ブックは複数生まれる
(413の「保存が1ブック1シートでないといけない」ということと、
「15ブックくらいなら目視&手入力でもいけますが日によって30-40ブックとなると」から推測)
3 作業用ブックは「ひな型」となるものを呼び出してA4セルに12桁の番号を入力し、A6セルには参照元
ブックから自動参照した結果が表示されたところで「12桁の番号」をブック名として名前を付けて保存する
4 上記3を15〜40回繰り返す
これでいいのかな?
もし、参照元ブックの名前が固定されているんであればVBAじゃなくてもできそうだけど。
作業用ブックのひな型のある範囲に参照元ブックのデータをまるごと外部参照でもってきておいて、
A6セルにVLOOKUP関数を書いたらいいんじゃないかな。
外部参照って言い方が正しいのかわからないけど、ヘルプで
「ほかのブックやアプリケーションへのリンクを設定する」を見てみてください。
0420412,419
2008/10/05(日) 17:50:560421デフォルトの名無しさん
2008/10/05(日) 18:16:273.の行程上でセルA4には12桁の番号が既に入った状態で届きます。こちらで入力はしません
VLOOKもいいのですが作業用ブックの開け閉めが面倒いというか少ない時はいいのですが、多い時にはどれがどれやらわからなくなるのです
0422420
2008/10/05(日) 18:41:03↑のことも入れて、もう一回自分なりに解釈したものを書きます。
1 参照元ブック(1シート)は日々内容が変わるけど、A列、B列にデータが記録されている。
(内容が固定されていないということは413の「多くて40行2列、少ない時は10行2列くらいの表が」から推測)
2 結果を求める(作業用)ブックはメールにて複数送られてくる
なので、作業用ブックに個々に計算式等を入れるのは無理(あるいは極力回避)
3 作業用ブックのA4セルには既に12桁の番号が入力されていて、
・現状では 参照元ブックを開いてA列に一致する行のB列の番号(9桁)をA6セルに入力して保存(の繰り返し)
・したいこと マクロブックを開いてマクロを実行したら、複数の作業ブックを手動で開かなくても
それぞれのブックのA6セルに自動的に対応する9桁の番号が記録されている
※作業対象のブックを指定する作業は手動か?
(作業対象ブックが保存されているフォルダを指定できれば自動化も可能)
0423デフォルトの名無しさん
2008/10/05(日) 18:52:530424デフォルトの名無しさん
2008/10/05(日) 19:10:08'作業対象のブック指定は手動?'の意味が今一つわかりませんがデスクトップにでも予めフォルダごと保存しておいて、作業をしてもらおうか?という算段です
というのも引継ぎでは手入力推奨でしたのでネットワークの中で何かやると怒られるかも?とか考えたり
ま、推奨程度ですからきちんとセルA6に番号が拾えていたら結果オーライだと思うのですが…
0425422
2008/10/05(日) 20:00:20流れとしてこんな感じかな? 画面更新をしないようにすれば画面がチラつきません。
1 作業ブックが収められているフォルダ中のエクセルファイルの一覧取得
2 参照元ブックを開く(ついでに2列×数十行のデータを配列に取得)
3 参照元ブックを閉じる
4 上記1で取得したファイル一覧からひとつずつ処理
(1) カレントブックを開く
(2) A4セルの値を取得
(3) 配列を調べて対応する値をA6セルに書き込む
(4) カレントブックを閉じる(変更確認ダイアログを非表示にしておくといい)
(5) (1)〜(4)の繰り返し
5 終了(画面更新再開)
処理がちゃんと進んでいるか確認するために、マクロを記録したブックに
A列:カレントブック名(もしくはフルパス)
B列:A4セルの値
C列:A6セルに書き込んだ値
を上から順に書き込んでみるといい。その場合は画面更新を停止しないように。
0426デフォルトの名無しさん
2008/10/05(日) 20:02:14関数を自作しようと思ったのですが、
その関数が代入されるセルのオブジェクトを取得することは可能でしょうか?
入門サイトを一通り見たのですが、そのような記述が見つかりませんでした・・・。
可能であれば関連するキーワードか、簡単な実装方法など教えていただけるとうれしいです。
0427デフォルトの名無しさん
2008/10/05(日) 20:02:53OS:XP、Excel2003
Module5で、Public Sub AAA() という関数を作成して
Module1で使おうとすると「名前が適切ではありません」というエラーが出ます。
Module1に関数を作成して、Module5使うことは出来ています。
これは、モジュール名の順番みたいなものが関係しているのでしょうか?
0428デフォルトの名無しさん
2008/10/05(日) 20:30:01マルチスレッドで処理をしたいのですがうまくいきません。
以下のテストコード(スレッド系関数の宣言は省略)で、セルへの書き込み自体は問題なく出来るのですが、
エクセル終了時や保存時等ににエクセル自体が落ちてしまいます。
どこが問題なのでしょうか?ご教示お願いします。
'----モジュール------
Public Const STILL_ACTIVE As Long = 259
Public Function testThread(ByVal n As Long) As Long
Dim i
For i = 1 To 10
Sheet1.Cells(1, n) = i
DoEvents
Next i
testThread = 0
End Function
'----シート------
Private Sub test_Click()
Dim hThd, idThd, dwExCode As Long
hThd = CreateThread(0&, 0&, AddressOf testThread, 1, 0&, idThd)
Do
DoEvents
If (GetExitCodeThread(hThd, dwExCode)) Then
If (dwExCode <> STILL_ACTIVE) Then Exit Do
End If
Loop While True
CloseHandle hThd
End Sub
0429デフォルトの名無しさん
2008/10/05(日) 21:11:43は、はぁ、、そんなかんじかと思いますがそれは記録マクロでできる作業なのでしょうか……
あまりな初級な質問ですみません
0430デフォルトの名無しさん
2008/10/05(日) 21:36:030431デフォルトの名無しさん
2008/10/05(日) 21:37:46ド素人がVBAでマルチスレッドを使おうとするのが問題
0432デフォルトの名無しさん
2008/10/05(日) 22:21:52作ってください!お願いします(^人^)
でももしかして記録マクロでもできる人はできるのかと思ったり(自分では無理ですが)……
何か自分の知らない簡単な方法があるような気がしてならなかったり?
0433デフォルトの名無しさん
2008/10/05(日) 22:32:39作るって、何を作る事だと思う?
と言うか、作成依頼はスレ違い。
自分でやって、分からない事を聞くようにしておくれ。
0434425
2008/10/05(日) 22:39:17このスレのbPの
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
は見てなかったようですね。
自分は明日の夕方以降ならなんとか対応できると思いますが、急ぐんだったら
この件のやりとりの部分 を印刷でもして職場でVBAのわかる人に見せてください。
マクロの記録だけではほとんどできません。条件分岐とか繰り返しとかファイル処理とかいろいろ
あります。
あるフォルダの中のディレクトリ一覧を取得して印刷する部分だけでも↓みたいになります。
http://www.excel.studio-kazu.jp/mag2/backnumber/mm20041012.html
0435デフォルトの名無しさん
2008/10/05(日) 22:39:410436デフォルトの名無しさん
2008/10/05(日) 22:44:42ってだけの簡単なことなんだけど、細かいところが不明なんで丸々作るめんどくさいのでパス。
0437デフォルトの名無しさん
2008/10/05(日) 22:46:490438デフォルトの名無しさん
2008/10/05(日) 22:47:200439デフォルトの名無しさん
2008/10/05(日) 23:08:07エクセルの学校の添付を有難うございました
私自身は忘れているとはいえ?ベーシックくらいは少し学んだのですが全く身についていないようですorz
手でやると、1回なら簡単な作業なのに文章にするとこんなにややこしくなるとは!!
ちょっとこの週末は時間がなかったのですが確かに自分であれこれ試してみたいと思います
会社では現在は時間が全くありませんがそのうち手薄になれば挑戦してみます!
0440デフォルトの名無しさん
2008/10/05(日) 23:30:16以前仕事で、とあるScript言語で食ってたんだけど、1年経ったら全部忘れてた。
0441デフォルトの名無しさん
2008/10/05(日) 23:32:35で、もう一つ質問させてください。
自作関数の演算結果を複数のセルに表示したいのですが、
Function func()
func = 1
ActiveCell.Offset(1).Value = 2
End Function
こうやるとこけてしまいます。
funcの返り値でなくActiveCell.Valueに代入すると循環参照で怒られます。
どうにか解決する方法はないのでしょうか?
0442427
2008/10/05(日) 23:38:12お願いします。
0443デフォルトの名無しさん
2008/10/05(日) 23:54:28Module5に作成してModule1で呼ぶのも
Module1に作成してModule5で呼ぶのも
問題なく出来ている
つまり「Module5に作成してModule1で呼ぶ」こと以外に問題があるということだ
ちょっとした自分のミスに気付かず、首を捻り続けたりソフトを疑ったりなんてよくあることだ
まずは新規ブックを作成して、標準モジュールを5個挿入し
Module5にPublic Sub AAA()
Module1にAAAの呼び出しプロシージャだけ書いて実行してみろ
それでダメならExcelもしくはOfficeはたまたWindowsを再インストールした方がいい
これで問題なく実行できるなら、自分のミスに気付いてないだけだ
0444デフォルトの名無しさん
2008/10/06(月) 01:10:32プロの人でさえ1年で!?
なんとか頑張ってみますと書いたものの、あの業務量を思うと頑張る暇などとてもなくゆーうつ・・・
はぁー、、楽したい。。
0445デフォルトの名無しさん
2008/10/06(月) 01:44:55ttp://support.microsoft.com/kb/170787/ja
0446441
2008/10/06(月) 02:03:42こんな・・・制限が・・・あった・・・なん・・・て・・・orz
VBAなんか大っ嫌いだうわあぁぁん
ありがとうございました。本当に助かりました。
0447デフォルトの名無しさん
2008/10/06(月) 02:41:530448デフォルトの名無しさん
2008/10/06(月) 05:32:26まずは、A6にvlookup入れて値コピーで上書きするマクロでも作ったら?
ファイル開いたり保存するのは取り敢えず手動としても、目視手作業で
入力してるよりよっぽど楽になると思う。
そこから徐々に、自動でできる部分を増やしてけばいいんじゃねーの?
あんたがVBA習得するまで仕事が待っててくれるならいいけどさ、
なんも出来ねーくせに余計なことばか考えて、自分で仕事増やしてるだけじゃね?
0449デフォルトの名無しさん
2008/10/06(月) 09:12:10月100時間勉強するのを三ヶ月位続ければ、あとは楽になるよ
0450デフォルトの名無しさん
2008/10/06(月) 19:17:30>>448
それはいい考えだと、本日早速セルA6にA4を見て予め用意した表から拾って来てくれ頼む!を打ち込んだところ………
後ろにもう一枚嫌なシートがあってなんと式がセルA6にそのまま表示されてしまうていたらく
後ろのシートとなんかリンク?が貼ってあるかのような得体のしれなさでもう素直にFIND窓で目視で探しました
件数も15件くらいでしたし
他の仕事があまりに立て込んでてそのシート間の関係さえ検討できないほどの忙しさなのです
もうフラフラです
皆様も季節柄お体気をつけて!
0451デフォルトの名無しさん
2008/10/06(月) 19:30:13Excelの使い方はよそで聞いて&愚痴ってくれ。
0452デフォルトの名無しさん
2008/10/06(月) 20:24:010453434
2008/10/06(月) 20:52:44作ってみました。長いので2件に分けます。
' DEBUG と書かれた行はテストのためにマクロを記録しているブックのアクティブシートに
処理対象ブックのフルパス、12桁の番号、FINDで求めた9桁の番号を表示させるためのもので、
丸々1行消しても動くと思うけど、こちらでは試してません。
例外処理は入れてません。フォルダーのパスとか検索範囲とかもプログラムで直接指定してますが、
マクロを記録しているブックに設定できるようにするとメンテがラクですね。
詳しい方には添削してもらえるとありがたいです。
Option Explicit
Dim BK_M As Excel.Workbook, TATE As Long ' DEBUG
Dim BK_I As Excel.Workbook, BK_O As Excel.Workbook
Dim SEARCH_PATH As String, FILE_NAME As String
Sub prog_408()
Set BK_M = ActiveWorkbook ' DEBUG
' 参照するだけとなるブックのフルパスやファイル名は適当に変えてください。
Workbooks.Open Filename:="D:\TEST_FOLDER\PRODUCT\PRODUCT.xls"
Set BK_I = Workbooks("PRODUCT.xls")
TATE = 3 ' DEBUG
' 変更対象となる10〜40個のブックが記録されているフォルダです。
' このフォルダにはメールで送られてくるという処理対象だけのブックを置いておくこと。
SEARCH_PATH = "D:\TEST_FOLDER\"
FILE_NAME = Dir(SEARCH_PATH & "*.xls", vbNormal)
Do While FILE_NAME <> Empty ' 繰り返し
Call PROC_1
Loop
BK_I.Close
Set BK_I = Nothing
Set BK_M = Nothing ' DEBUG
End Sub
0454デフォルトの名無しさん
2008/10/06(月) 20:53:51Private Sub PROC_1()
Dim WK_PATH As String, BANGO_12 As String, BANGO_9 As String
Dim c As Excel.Range
WK_PATH = SEARCH_PATH & FILE_NAME
Workbooks.Open Filename:=WK_PATH
Set BK_O = Workbooks(FILE_NAME)
With BK_M.Worksheets(1) ' DEBUG
.Cells(TATE, 1).Value = WK_PATH ' DEBUG A列に処理対象ブックのフルパスを書き込む
BANGO_12 = BK_O.Worksheets(1).Range("A4").Value
.Cells(TATE, 2).Value = BANGO_12 ' DEBUG B列に「12桁の番号」を書き込む
End With ' DEBUG
' 次行のA2:A41は実際のデータの開始位置と考え得る最大の範囲を指定してください。
Set c = BK_I.Worksheets(1).Range("A2:A41").Find(BANGO_12, LookIn:=xlValues)
If c Is Nothing Then
BANGO_9 = ""
Else
BANGO_9 = c.Offset(0, 1).Value ' ←ここで9桁の番号が求められました
End If
BK_O.Worksheets(1).Range("A6").Value = BANGO_9 ' ←やりたいこと はこの部分です
BK_M.Worksheets(1).Cells(TATE, 3).Value = BANGO_9 ' DEBUG C列に「9桁の番号」を書き込む
BK_O.Close
Set BK_O = Nothing
TATE = TATE + 1 ' DEBUG
FILE_NAME = Dir()
End Sub
0455デフォルトの名無しさん
2008/10/06(月) 21:37:47はい次の方
0456448
2008/10/06(月) 21:40:19もうあきれて物も言えん、、、
0457デフォルトの名無しさん
2008/10/07(火) 10:54:200458デフォルトの名無しさん
2008/10/07(火) 22:39:190459デフォルトの名無しさん
2008/10/07(火) 22:54:35:= ←これはどういう時に使うものですか?
本見てもよくわかりませんでした('A`)
0460デフォルトの名無しさん
2008/10/07(火) 23:59:42詳しい人がいないようなので、未熟ながら小生がヒントを。
上の454のマクロに2カ所使ってありますが、いずれもメソッドのパラメータを指定してますね。
Workbooks.Open Filename:=WK_PATH
→Openメソッドでフォルダのパスを指定(Openには読みとりモードも指定できますが、この場合は
記載してないので規定値ということ)
Set c = BK_I.Worksheets(1).Range("A2:A41").Find(BANGO_12, LookIn:=xlValues)
→Findメソッドで値検索を指定
VBAのエディタの画面でsortメソッドのHELPを見てください。10個以上のパラメータを指定できます。
省略できるものもあるので、どのパラメータをどのように指定するかをメソッドの行の中に(見た目は
改行されていてもひとつながりなら1行とみなす)続けて書くときに必要となるものです。
こういう説明でわかりますか?
0461デフォルトの名無しさん
2008/10/08(水) 00:02:450462460
2008/10/08(水) 00:12:19→Openメソッドでフォルダのパスを指定 じゃなくて、
→Openメソッドでファイルのフルパスを指定 だった。
0463デフォルトの名無しさん
2008/10/08(水) 21:17:17お時間を割いて頂きたいへん有難うございました
ノートに早速書き写したところなんと2頁にも及ぶなんて!(記録マクロと大違い)
段落が判らないので近い内ネカフェに印刷しに行けたら、と思っています
本当にありがとうございました
また、余りの忙しさにお礼が遅れすみませんでした
あの後記録マクロに成功し開けたり閉じたり繰り返したりができないものの、VLOOKでショートキーを使い保存までこぎつけました
目視と比べとても楽ちんでした
ところがご指摘のとおり後ろにマクロ用?のようなシートがついているせいか?セルの表示が尋常でなく無理矢理値貼付けで乗り切ったのです
その後9桁の数字が入力されたブックをマクロに通す作業がありましたので
0464sage
2008/10/08(水) 21:22:35その中でVBAという物を使うということで質問をしに来ました。
内容は集計ボタンを押すと
同フォルダ内に配置されてるエクセルのファイル名を読み取って
事前に用意されている集計表の中に概要をコピーするというものです。
集計対象のエクセルは毎週作成され、「ファイル名称(作成日付)」で作られていき
数ヶ月に一度集計ボタンを実行します。
VBA、というかプログラムは全くのド素人ですが、
どういった文法?で作れば良いかなにかヒントだけでも教えて頂ければと思いこのスレに来ました。
皆さんどうか知恵をお貸し頂けないでしょうか、宜しくお願いします。
0465デフォルトの名無しさん
2008/10/08(水) 21:36:56間違えて人の(どのブックにも3〜5個はある)は解放してないとは思うのですが、その後マクロの消えたブックになったりならなかったり
挙句いつもきちんと実行(9桁の番号が入ったブック達を通す)できていたマクロがデバッグ
とりあえず慌てたものの優先事を片付け、再度初めからメール添付を保存しなおし今度はマクロを使わず手入力し、
手順のマクロを実行すると……………デバッグ
解放がいけなかったのでしょうか
記録マクロがいけなかったのでしょうか
黄色い行には"後ろのシートをアクティブにetc…"となっています。勿論このマクロは私が実行した記録マクロと違いえらい長く書いてある別の仕事の為のマクロです(抽出とまとめ)
0466デフォルトの名無しさん
2008/10/08(水) 21:41:57>>1★5
ここは右も左も解らない奴が来るところじゃない
どういう処理がしたくて、どういうコードを書いたが、どの部分で躓いてるのかを
具体的に質問できるレベルになってから出直すか
急ぎや勉強が嫌なら、金払ってVBAコード書いてくれるところに依頼しろ
車を運転するには免許が居るように、便利な物を利用するにはそれに応じた資格(スキル)が要る
その資格無しに利便性を求めるなら、車でもタクシー使ったり運転手雇ったりするように
金使って解決しろ
0467デフォルトの名無しさん
2008/10/08(水) 21:48:54453、454の中に書かれていますよ。
あと、434で紹介されたurlも参考になると思います。
文法云々ということであれば、エクセルVBAの入門書を入手するか、
ウェブの初心者向けサイトを調べてみてください。
それから、このスレのbPをよく読んでください。
0468デフォルトの名無しさん
2008/10/08(水) 21:54:43その場合保存さえしなければ誰かが作成された、いつもは健全に働くモジュールを壊す事にはなりませんよね?
いつもエラーなど発生しないのに私が要らないマクロを被せたせいで何かがどうかなったのでしょうか
自分のだけ解放しても他のマクロに影響があるのでしょうか
それだけではないのです
今日は昼飯時に453さんの回答に気づきお礼をカキコするつもりが横に置いていた鞄に散歩中の犬がしっこをかけたのです!
こんな目に遭う人がいますでしょうか
仕事もテンパリは続き少々のアルコールでは何にもなりません
皆様もこの寒暖の激しさにはお気をつけ下さい
0469453,454
2008/10/08(水) 22:11:56まだ、私が453〜454に書いたものは実行していないと思いますが、念のため書いておきます。
上記マクロは新規ブックの標準モジュールに書いてください。(ファイル名は任意ですが、
以下の説明ではマクロブックと呼びます)
あなたが仕事で扱うブックには絶対に書かないでください。
エクセルを起動したらマクロブックを開き、ツール−マクロ−編集− prog_408 を選びます。
マクロ文中のフォルダ指定とかセル範囲などを実際のものに変更したうえで、いったん保存。
そのうえでprog_408を実行してみてください。
なお、私はWindowsXp、Excel2003で試しています。
ここまで書いたところで、468を見たので追加
465で書いてある「自分のショートキーのモジュールを解放」が気になる。そのモジュールにはあなたの
マクロだけしか書いてなかったのかな? 本当に「自分のだけ」のモジュールでしょうか?
ひとつのモジュールには複数のマクロが記録されるんですよ。
壊れてしまったものは、現場で対応してもらうしかないと思います。
0470デフォルトの名無しさん
2008/10/08(水) 22:56:330471デフォルトの名無しさん
2008/10/08(水) 23:34:460472デフォルトの名無しさん
2008/10/09(木) 00:01:02モジュールが単独だったか複数かという事ですが、珍しくうまくいった為解放する前にモジュールを表示させて自分の記録マクロを印刷しました
そこには15行程度の構文が書かれていたのみですので下の方にもあったか?となるとおそらくなかったような……
なお記録する前に保存先を作業中のブックよりもう一つ深い範囲に適用する、を選択したと思います
これがいけなかったのかもしれません
あぁ楽をするのも大変ですね……
お先にお休みさせて頂きます。ありがとうございました。。
0473デフォルトの名無しさん
2008/10/09(木) 07:42:16現在PC環境にありませんが是非訪ねてみたいと思います! 晴れた今日も良い一日を!!
0474デフォルトの名無しさん
2008/10/09(木) 08:47:46>>1の★5のことだ・・・
マジでテンプラ読めないやつ増えてるのか?
0475デフォルトの名無しさん
2008/10/09(木) 09:51:500476デフォルトの名無しさん
2008/10/09(木) 10:17:49どのブックにもVBAモジュールがある…だと?
あんた、「1ブックにはそれぞれ1シートしかないから、全シートを
一旦まとめて、後でまたバラして保存すれば…」なんて書いてたよな。
それでどういうことになるのかわかってるのか?
あんたみたいなのは下手なことに手を出すな。
気づかない内に絶対まわりに迷惑かけてるから。
後始末する側の身にもなれ。
0477デフォルトの名無しさん
2008/10/09(木) 11:00:15他にVBAとか入ってるなら下手したら変数名とかかぶるし
0478デフォルトの名無しさん
2008/10/09(木) 11:17:510479デフォルトの名無しさん
2008/10/09(木) 18:06:20この値をVBAで取得する方法があれば教えて下さい。orz
0480デフォルトの名無しさん
2008/10/10(金) 21:21:370481デフォルトの名無しさん
2008/10/11(土) 03:49:58【モジュール】
Private Foo As Integer
public sub Bar(Baz As Integer)
Foo = Baz
End Sub
↓
【フォーム】
Private Sub TextBox1_Change()
On Error Goto Err
If ( Len(TextBox1.Text) > 0 ) And ( IsNumeric(TextBox1.Text) = True ) Then
Call Bar(TextBox1.Text)
Else
TextBox1.Text = ""
End If
Err:
If Err.Number <> 0 Then
MsgBox Err.Description
End If
End Sub
0482デフォルトの名無しさん
2008/10/11(土) 07:15:22まあfooかbazに入れてる値がまずいんだろう
0483デフォルトの名無しさん
2008/10/11(土) 07:46:33犬に聖水をかけられた鞄は無事洗濯いたしました
ところで9桁の番号を取得した後に'抽出とりまとめ'の長いコードの最初でデバッグが出始めた話でしたが
なんと手順を間違えていたらしい事が昨日判明しました
そのとりまとめ用の長いコードを実行するにはエクセルを全部閉じておいて、マクロブックを先に開いた後
例の9桁番号を取得したブックたちを開かなければならなかったのが、9桁の事で頭いっぱいでそちらを先に開いていたのです
恐らくこれが原因だったようです。まだ1回しか成功していませんがこの、全部閉じとけよ!はどのコードだったのでしょう?
しかもそこで黄色になる訳ではないのですね??
もっと丁寧なデバッグ説明表示ならいいのに……
0484デフォルトの名無しさん
2008/10/11(土) 07:59:35ほんとに単純なシートなので高度なコード?ではないようです
デバッグが出てヒィヒィ言っていたマクロブックも長いコードながら実行できない間は手作業でカバーできるものではありました
けれど実行できればそれはそれでたいへん楽です!
なんとか仕事が手薄な時間を作り出し教えて頂いたコードに挑戦できる日がくるのを夢みて…
0485469
2008/10/11(土) 10:09:56「全部閉じとけよ!はどのコードだったのでしょう?」への回答→そんなコードはない。
まさか、最大42ものブックを開いたところでマクロを実行させるつもりだったのか?
[42=マクロブック+(2列×40行のデータのブック)+メールで送られる40ブック]
FILE_NAME = Dir(SEARCH_PATH & "*.xls", vbNormal)
Do While FILE_NAME <> Empty ' 繰り返し
Call PROC_1
Loop
と
WK_PATH = SEARCH_PATH & FILE_NAME
Workbooks.Open Filename:=WK_PATH
Set BK_O = Workbooks(FILE_NAME)
〜
BK_O.Close
FILE_NAME = Dir()
でファイル一覧からひとつずつ開いて転記してクローズしている。
ちなみに、マクロを実行すると変更を保存するかどうかのダイアログが表示されるはず。
その際A4セルの12桁の番号に対応した9桁の番号がA6セルに入っているので確認できる。
0486481
2008/10/11(土) 12:15:07【モジュール】
Private Foo As Integer
public sub Bar(Baz As Integer)
Foo = Baz
End Sub
↓
【フォーム】
Private Sub TextBox1_Change()
On Error Goto Err
If ( Len(TextBox1.Text) > 0 ) And ( IsNumeric(TextBox1.Text) = True ) Then
Call Bar(TextBox1.Text)
Else
TextBox1.Text = ""
End If
Err:
If Err.Number <> 0 Then
● MsgBox Err.Description 'テキストボックスにキーボードから値を入力したとき、ここでエラーが出る。
End If
End Sub
0487デフォルトの名無しさん
2008/10/11(土) 12:45:270488デフォルトの名無しさん
2008/10/11(土) 14:52:03だからOn Error外せって
0489デフォルトの名無しさん
2008/10/11(土) 16:23:17>>483-484は、まだおまいの作ったコードは実行してないと思う
ネカフェで印刷して会社へ持って行って、見ながら手打ちしてからだから、
来年ぐらいじゃないかな
0490479
2008/10/11(土) 17:48:11VBAからソートプロパティを取得する方法は無いのでしょうか?
0491デフォルトの名無しさん
2008/10/11(土) 18:52:51テキストボックスの値を関数に渡す前にVal()で数値に
変換したら。
0492デフォルトの名無しさん
2008/10/11(土) 19:03:24> キーワードを変えてググってみても見つけられなかった。
> VBAからソートプロパティを取得する方法は無いのでしょうか?
>
ソートの設定のこと?
これならマクロの記録でできるけど。
Range.Sort Key1:= ・・・・ Order1:= ・・・・
0493デフォルトの名無しさん
2008/10/11(土) 19:10:50これまでの書き込みから、ソートの「設定」ではなく「設定内容の参照」のようです。
なので、今まで回答がない。詳しい人の目にとまるまで回答はないかも。
0494デフォルトの名無しさん
2008/10/11(土) 20:58:41単純にセルの値取得すればいいだけじゃないの??
0495デフォルトの名無しさん
2008/10/11(土) 23:01:15Excel: 2007
チャートの目盛線のスタイルを「破線」にしたいと思っていますが、
以下のようなコードを実行しても、「長破線」になってしまいます。
ActiveChart.Axes(xlCategory).MajorGridlines.Border.LineStyle = xlDash
LineStyleの値として設定できる値(xlDash, xlDashDot, xlDashDotDotなど)を
すべて試しましたが、やはり破線にはなりませんでした。
今は、手動で「目盛線の書式設定」→「線のスタイル」→「実線/点線」から、破線に設定しています。
VBAからは、チャートの目盛り線のスタイルを破線にはできないのでしょうか?
0496デフォルトの名無しさん
2008/10/12(日) 00:38:29@列を選択
AダイアログBoxに文字を入れ検索
B検索にヒットしたセルの左のセルに*を入力
具体例
@’D列・F列を選択
A’ダイアログBOXに検索したい文字 イロハ を入力
B’ イロハニホ が入力されてるセルD1の左C1と
アイロノカニ が入力されてるセルF3の左E3に*を入力
この作業のうちAとB(例はA’B’)をマクロで効率化したいと思っています。
詳しい方、コードを教えて下さい m( )m
この板を知る前に総合相談所にカキコしてしまったことをご容赦願います。
0497デフォルトの名無しさん
2008/10/12(日) 05:46:190498デフォルトの名無しさん
2008/10/12(日) 07:07:43先に総合相談所にも謝って来いよ
0499479
2008/10/12(日) 13:44:23おっしゃる通り、ソートの設定状態を参照したいのです。
Excelの並べ替えメニューに現在のソート状態が表示されるので、何処かに
ソート状態を保持している筈なのです。
これを取得する方法が分かりません。
0500デフォルトの名無しさん
2008/10/12(日) 16:54:02で、(直前に行われたであろう手動による)ソートの各種設定を参照してナニしようとしてるんですか?
0501デフォルトの名無しさん
2008/10/12(日) 17:29:28シートAにデータがあり、
シートBがアクティブ時にはシートAの選択データからシートBを編集します
シートCがアクティブ時にはシートAの選択データからシートCを編集します
シートBやシートCを編集する時のシートAのソート条件が異なるので
編集できるかどうかを判断するためにソート状態を知りたいのです。
実際には、プログラム用ブックと上記のデータ用ブックに分かれていて
プログラム用ブック側でデータブックのイベントを拾って汎用的に処理
しています。
0502500
2008/10/12(日) 19:23:34シートAは手動でソートするんですか? シートAのソートをマクロで実行して、
その際のパラメータをデータブックに記録しておけばどうですか?
シートAのソートのパターンをいくつかつくっておいてマクロ実行時選ぶように
したらいいのでは?
0503デフォルトの名無しさん
2008/10/12(日) 22:26:40ソートされる事も想定が必要です。
プログラムブックからデータブックを開いて、データブックに定義されている
内容によりデータブックのアクティブシートを編集しています。
データブック側にはVBAコード等の記述は不要であり、プログラムブック側に
VBAコードを記述し、データブックのイベントを拾ってデータブックの編集を
行っています。
データブックは任意のxlsファイルが指定できます。
0504デフォルトの名無しさん
2008/10/12(日) 23:42:020505デフォルトの名無しさん
2008/10/13(月) 00:01:290506503
2008/10/13(月) 00:02:44(Excel2000)されている事に気付いたので、取得する方法がある筈と考えた次第
です。
Excel2007を一寸見たら、現在のソート状態は表示されないみたいですね。
諦めかな...
0507デフォルトの名無しさん
2008/10/13(月) 00:27:160508デフォルャgの名無しさん
2008/10/13(月) 00:35:54■ このスレッドは過去ログ倉庫に格納されています