Excelでマクロを組んでいます。
以下のような場合にどのように組めばいいのか、悩んでいます。
是非、ヒントを下さい。

Excelファイル「book1」でマクロを組んでいるとします。
1)book1のセルA1に入力されている文字列と同じファイル名のbookを選択できないか
2)セルA1から順にA2、A3、A4と文字列の入力がないセルまで自動的にセル番地を横へおくり、1)の操作を繰り返すことができないか

ちなみに検索対象となるbookはすべて同じフォルダの中に格納されています。

よろしくお願いします。

A 回答 (4件)

merlionXXです。



> セル番地はA1、B1、C1と横へ順におくれればと考えています。

要は書き間違いということですね。対応しました。

> セル内と同じ文字列のbookを開かず、そのbookの中のsheet1の特定の範囲を指定、コピーし、book1の指定の欄にに貼り付けたいと考えています。

開かずにデータを取得できません。ただ開いたのを気づかせないことはできます。これも対処しました。
でも、「指定範囲」がどうなっているのかお書きいただけないので、指定範囲のデータを取得し指定範囲に貼り付けるというコードは書けません。

Sub TEST03()
Dim myFn As String
Dim myRng As Range
Dim tb As Workbook, wb As Workbook
Set tb = ThisWorkbook
Set myRng = tb.Sheets("Sheet1").Range("A1")
Application.ScreenUpdating = False
Do While myRng <> ""
myFn = myRng.Value
Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & myFn & ".xls")

'wbの指定範囲のデータ取得&tbの指定範囲に貼り付けるマクロ

wb.Close (False)
Set myRng = myRng.Offset(0, 1)
Loop
Application.ScreenUpdating = True
End Sub
    • good
    • 0

(1)A1セルに値が入ったらーー>というイベントの考えか


A1,B1,C1にブック名があって、選択したセルの値のブックを対称にするのか。どちらもイベントの考えを勉強は済んでいるのか。
(2)>フォルダの中に格納されています。
であれば、セルの値(=ファイル名。ただしXLS(X)。エクセルブック限定。)の名前から、そのブックを開くという質問は良くある。
FSOやDIRで出来る。
(3)本件は#1のお礼の>bookを開かず、が問題で、エクセル4.0マクロ(最近回答した質問あり。昔から質問回答は時どき有る)の利用が有るが、旧時代のもので、使うことはお勧めしないとされる。基本はブックを開いて、読んでセルの値をとり、閉じるである。
それでは処理時間がかかりすぎるのかな。
ーー
こういう特殊な好みを貫徹したいなら、質問者自身が自分で勉強のこと。幸いGoogleで「エクセル4.0マクロ」で照会すると、たくさんの記事があり、コード例もある。
たとえば
http://www.moug.net/tech/exvba/0060037.htm
の終わりの方を参照。
そのほか他ブック参照
http://www.excel-jiten.net/formula/ref_other_boo …
の最後
ーー
ためしにやってみた例
A1;C1にブック名 (3つの例。・・・の部分はわざと省略した)
キーで・・・位置を・・・該当文字・・
ーー
コード(確認用にMsgboxやCellsを入れているが、本来は無いもの)
Sub test01()
Set targetrange = Range("A1:C1")
k = 5
For Each cl In targetrange
'MsgBox cl
fn = CurDir & "\" & "[" & cl & ".xls]" & "Sheet1"
MsgBox fn & "'!R" & "1" & "C" & "1"
Cells(k, 2) = fn & "'!R" & "1" & "C" & "1"
v = Application.ExecuteExcel4Macro _
("'" & fn & "'!R" & "1" & "C" & "1")
MsgBox v
Cells(k, "B") = fn & "'!R" & "1" & "C" & "1"
Cells(k, "A") = v
k = k + 1
Next
End Sub
ーーー
結果(私のテスト例)
A列に探したセルに値、B列が探した番地。Sheet1のA1セルに固定例
数字コードC:\Documents and Settings\xxxx\My Documents\[キーで・・・.xls]Sheet1'!R1C1
あC:\Documents and Settings\xxxx\My Documents\[位置を・・.xls]Sheet1'!R1C1
規則C:\Documents and Settings\xxxxTO\My Documents\[該当文字・・・・.xls]Sheet1'!R1C1
    • good
    • 0

両方とも可能ですが、前提条件が不明です。



>文字列と同じファイル名のbookを選択できないか
各bookはすでに開いている条件でよいのか、どちらか不明なので閉じている場合は開き、開いている場合はそれを選択ということなのか。

>自動的にセル番地を横へおくり
A1、A2、A3は通常縦なので横に送るという意味が不明

とりあえず参考までに、セルのファイル名のものがフォルダ内にあるか順にチェックする例を
必要に応じて、ファイルを開いたり、選択して処理したりを加えればよろしいかと…
Sub test()
Dim fName As String, c As Range
Set c = Cells(1, 1)
While c.Text <> ""
 fName = ThisWorkbook.Path & "\" & c.Text
 If Dir(fName) <> "" Then
  MsgBox (fName) '処理の代わりにファイルパスを表示
 End If
 Set c = c.End(xlDown)
Wend
End Sub
    • good
    • 0

> 1)book1のセルA1に入力されている文字列と同じファイル名のbookを選択できないか



Book1のどのシートのA1ですか?
記入がないのでSheet1とします。
また「BOOKkを選択」とはどういう意味かわからないので、とりあえず「開く」ことにします。

2)セルA1から順にA2、A3、A4と文字列の入力がないセルまで自動的にセル番地を横へおくり、1)の操作を繰り返すことができないか

A2、A3、A4ならセル番地を横へではなく縦ではないのですか?

> ちなみに検索対象となるbookはすべて同じフォルダの中に格納されています。

ではBOOK1はどこにあるのですか?
検索対象となるbookのフォルダーも書いていないので、BOOK1はかならず検索対象となるbookと同じフォルダーにおき、一度保存してください。(フォルダーパス取得のため保存が必須です)

Sub TEST質問1()
Dim myFn
myFn = ThisWorkbook.Sheets("Sheet1").Range("A1").Value
Workbooks.Open (ThisWorkbook.Path & "\" & myFn & ".xls")
End Sub

Sub TEST質問2()
Dim myFn
Dim myRng
Set myRng = ThisWorkbook.Sheets("Sheet1").Range("A1")
Do While myRng <> ""
myFn = myRng.Value
Workbooks.Open (ThisWorkbook.Path & "\" & myFn & ".xls")
Set myRng = myRng.Offset(1)
Loop
End Sub

この回答への補足

質問の仕方に不備があり、申し訳ありません。

1)に関して
セル番地はA1、B1、C1と横へ順におくれればと考えています。

2)に関して
セル内と同じ文字列のbookを開かず、そのbookの中のsheet1の特定の範囲を指定、コピーし、book1の指定の欄にに貼り付けたいと考えています。ちなみにコピー元、コピー先のsheetの構造は同じです。

補足日時:2009/05/22 13:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q復元ポイントの作成とイメージファイル等のバックアップとの違いについて

今晩は、宜しくお願いします。

復元ポイントの作成とイメージファイル等のバックアップとの違いについて教えて下さい。

Windowsで復元ポイントからシステムを復元させる方法があり、
また、イメージファイル等にバックアップをとり、復元させる方法もありますが
この両者はどのように違うのでしょうか。

復元ポイントの作成とは、その時点のシステムの設定等だけを保存しているという
ことでしょうか。

また、イメージファイル等のバックアップを作成するということは
システム設定と作成したファイル等もイメージファイルとして一括してバックアップ
されるのでしょうか。

イメージファイルの復元時に、作成したファイル等もイメージファイルから
復元されるのなら、同じ名前のファイルがあった場合には、
イメージファイル作成時の古い情報のファイルになってしまうのでしょうか。

以上、宜しくお願いします。

Aベストアンサー

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。修復されるのは、選択した項目により異なる。
WindowsREを利用。
https://msdn.microsoft.com/ja-jp/library/hh825173.aspx

【バックアップと復元】
システムのバックアップを作成し、ハードディスクなどが壊れた場合に備えパソコン内部のデータを全てバックアップ・復元出来る。
Windowsのインストールディスクや、システム修復ディスクから復元が可能。
システムもユーザーデータもバックアップを取った時点の状態に戻る。

【システムの復元】
Windowsが使用するシステムファイルのバックアップと復元。
ユーザーファイルには影響しない。
HDDの中に作成されるので、Windowsが起動しない環境では使用出来ない。

【システム修復ディスクの作成】
Windowsの起動時にF8を押下して起動するセーフモードから「コンピューターの修復」「システム回復オプション」を、外部記憶装置(CD、USBメモリなど)から起動出来るようにする。
Windows自体が起動しなくなった場合に、外部記憶装置から「システム回復オプション」が起動出来るようになる。...続きを読む

Qマクロ「A1の値は、セル範囲でA1:AB39の右2文字が YR と書いてあるセルの右隣の値」

よろしくお願いします
いつもgooの皆さんに大変お世話になっています
エクセルは2013です

マクロで
「A1の値は、セル範囲でA1:AB39の値(文字列)の右端2文字が YR と書いてあるセルの右隣の値」
はどういうコードになるでしょうか

例えば セル D10 の値(文字列)が、「2月合計yr」でしたら
セル A1 には 右隣のセル E10 の値を表示したいのです

右2文字は Ucase(Right(セル,2)) ですが
「セル範囲A1:AB39で、そのセルの右端2文字がYRと書いてあるセルの右隣のセル」を
探す方法が分かりません

Aベストアンサー

本来、以下は省略して書くことが多いのですが、明示的に書かせていただきます。

Ucase(Right(セル,2)) ->MatchCase:=False
全角半角の違いは、MatchByte:=False
末尾のyr を探すのは、What:="*yr"  (LookAt:=xlWholeも必要)
現在のコードは1回限り After:=Range("A1") 続けるなら、ActiveCell

私は、ここのカテゴリでは、質問者さんから、答えだけ書いてりゃいいのだ、というので、みなさんから評判が悪いようです。
どなたかの回答をお待ちになっても良いかと思います。

'//
Sub SearchChars()
 Dim c As Range
 With Range("A1:AB39")
 Set c = .Find( _
  What:="*yr", _
  After:=Range("A1"), _
  LookIn:=xlValues, _
  LookAt:=xlWhole, _
  SearchOrder:=xlByRows, _
  MatchCase:=False, _
  MatchByte:=False)
    If Not c Is Nothing Then
     c.Offset(, 1).Value = Range("A1").Value
    End If
 End With
End Sub
'//

本来、以下は省略して書くことが多いのですが、明示的に書かせていただきます。

Ucase(Right(セル,2)) ->MatchCase:=False
全角半角の違いは、MatchByte:=False
末尾のyr を探すのは、What:="*yr"  (LookAt:=xlWholeも必要)
現在のコードは1回限り After:=Range("A1") 続けるなら、ActiveCell

私は、ここのカテゴリでは、質問者さんから、答えだけ書いてりゃいいのだ、というので、みなさんから評判が悪いようです。
どなたかの回答をお待ちになっても良いかと思います。

'//
Sub SearchChars()
 Dim c...続きを読む

Q救出ファイル復元 2の機能について

「救出ファイル復元 2」で画像ファイルJPEGの他にRAWファイル、拡張子(CR2)を復元出来るでしょうか。

キャノンの一眼デジカメを使っているのですが、他の復元ソフトでは、復元出来ませんでした。

Aベストアンサー

Vectorあたりで『ディスク・ファイル復旧』の項目で探せばみつかりそうですが。
要は,"復元ソフトで復元できるファイルがソフトに登録されている拡張子だけしかできない"ことですので,拡張子を選択できる復元ソフトを捜せばいいと思われます。

参考URL:http://www.vector.co.jp/vpack/filearea/win/util/disk/care/

QA1セルにAと入力すると、A2セルに3000A3セルに2000A4セルに1000と表示させたい。

A1セルに「A」と入力する1回だけで、
A2セルに「3000」
A3セルに「2000」
A4セルに「1000」
A5セルに「合計数字」を表示させたいのですが、
式をご教授願いたいです。

よろしくお願いします。

Aベストアンサー

D1:G3
A500030001000
B500300130
C1200800300
A1にA,B,Cのどれかを入れる。
A2に =VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE)と入れて、
A4まで(G-D-1列数だけの行数)式を複写する。
結果
A1がBの場合A1:A4は
B
500
300
130

A1の空白の場合に対処して
=IF(A1="","",VLOOKUP($A$1,$D$1:$G$2,ROW(),FALSE))
が良いでしょう。
(既回答とほぼ同じ式ですが、1箇所違うところがあります。)

Q削除した画像ファイルの取り出しまたは復元方法

ごみ箱に入れてから削除したファイルの復元方法を教えてください。

以前にも同様の質問をしたのですが、その際に教えていただいた方法で確かにいくつかのファイルは復元することができました。

しかし、一番復元したい画像ファイル(jpeg形式)が復元できません、同時期に同じく削除したファイルは無事に取り出せたのですが肝心のファイルは取り出せません。指定するファイル名、フォルダ名などの間違いはないのですが何が原因で復元できないのか理解できません。

良きアドバイスをいただければ助かります。
宜しくお願いいたします。

Aベストアンサー

こういったファイル復元ソフトを利用してファイルを復活させます。

●FileRecovery(フリーウェア)

消去・欠損したファイルを復元するソフト。
http://www.pcinspector.de/download.htm

●復元(フリーウェア)
http://www.vector.co.jp/soft/win95/util/se192983.html

■FINALDATA(ファイナルデータ)フォトリカバリー3.0(有料)
http://www.finaldata.ne.jp/f_8_3.html

当然ながら復元できる確立は有料ソフトのほうが高いです。

これらを使っても復元できない場合はファイルが上書きされて完全に消えている可能性が高いです。

QエクセルでBook1のシート1の任意のセルからBook2のシート1の任

エクセルでBook1のシート1の任意のセルからBook2のシート1の任意のセルにコピペをせず=(イコール)を使って移行する方法があったと思うのですが、やり方を忘れてしまいました。

どなたかご存じの方教えてください。よろしくお願い致します。

Aベストアンサー

基本的には、
='[A.xls]Sheet1'!B1
のように参照します。

やり方としては
・2つのブックを開いておく
・参照先のセルを選択し、「=」を入力する。
・参照元のセルを選択し、「Enter」を押す。

です。

Q「ウイルス感染ファイル」削除後のシステム復元でどうなる?

ウイルスバスターで幾つかのウイルス感染ファイル発見し全て削除しましたが、感染したファイルはシステムファイルでしたので少し心配でしたが削除しました。
そこで教えて頂きたいのですが、感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?

Aベストアンサー

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライブにOSのインストールディスクを入れておく。
2.「スタート」「コマンドプロンプト」または「ファイル名を指定して実行」で
「sfc /scannow」と入力して「OK」

「Windows XP professional のディスクを入れてください」という表示が出ることがありますがHome Editionであれば「無視」を選んでスキップしてください

>感染した日付以前でシステムの復元をする事によって削除されたシステムファイルは復元できるのでしょうか?
出来ないことはないでしょうが、あまりお勧めできません。
現在の状態が正常でない。
過去の状態の方が快適に操作できる。
という場合、それがいいかもしれません。
しかし、Windowsの設定というのは非常に広範囲にわたっており、現在と過去を比較して、どちらが適正かを判断するのは容易ではありません。
また、過去の復元ポイントの中には不正な設定が含まれている場合があり、間違って、そのポイントを選択することもあります。
ウィルス対策ソフトのサイトでは一旦復元設定を無効にして、過去の復元ポイントを全て消去することを推奨しています。

>一度削除されたシステムファイルはシステムの復元をしても二度と復元しないのでしょうか?
間違った操作をすると汚染されたファイルが復元されてしまいます。
一旦復元設定を無効にして、過去の復元ポイントを全て消去することで汚染されたファイルは二度と復元しません。

以下WindowsXPという前提で・・・

>システムファイルでしたので少し心配でしたが削除しました。
通常、このままではシステムエラーが発生します。
しかし、Windowsには自動復旧機能があり、削除されたファイルをハードディスク上にあるCabファイルから呼び出して復旧させるようになっています。
従って、殆どの場合、削除されたシステムファイルを手動でインストールする必要はありません。

☆SFCの実行
もしシステムエラーが出る場合SFC(System File Checker)の実行をお勧めします。

1.CDドライ...続きを読む

Q セルの内容を他のセルに順にコピーするマクロ

a1からa100までをマクロを使ってb1に順にコピーしたい。その場合、セルの内容が空になったところで、その作業を終えたい。

Aベストアンサー

Rangeオブジェクトの「Find」メソッドが空白セルや指定の文字列などをのセルの行番号(Row)を取得するのに便利です。
下記の例では指定範囲を定義(Set)し、その定義範囲で最初の空白セルの行番号を取得できるので、その1行上(-1)が空白でない最後のセルになります。そこで、その最後のセルまでループ処理(For~Next)します。
Option Explicit
Public Sub GetData()
Dim rCol As Range, lngRow As Long, i As Long
Set rCol = Range("A1:A100")
lngRow = rCol.Find("").Row
For i = 1 To lngRow - 1
Range("B" & i) = rCol(i)
Next i
End Sub

Q復元ソフトのふと感じた疑問 -ファイル名を削除したい-

先日、復元ソフトを使用していたときに感じたことなのですが
(使用ソフトは「復元」です。)
ファイルを復元する際の手順で削除したファイルが検索できますよね。
このファイル検索の時に、HITしないようにファイル名を完全に削除したい場合はどのようにすればいいのでしょうか??

例えば、「●●との秘密旅行001.jpg」のファイルを削除したとします。
その後、復元ソフトで検索をかけるとファイルを復元しなくてもファイル名を見ただけで怪しいファイルとわかってしまいますよね。
復元ソフトの検索で、表示されなくする方法か、別名に変える方法があるのなら教えてください。

Aベストアンサー

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名前を消去したいファイルをクリックするか、名前を消去したい複数ファイルを左クリックしながら選択する→[消去]ボタンをクリック→[OK]をクリック

これで、名前を消せます。しかしながら完璧ではなくて、一部消せないこともあります。
(「DataRecovery」を再起動してもう一度ドライブをスキャンすると消せなかったファイルが表示されます)

参考URL:http://www.vector.co.jp/soft/win95/util/se382922.html

95159さんが求めていらっしゃるのは以下の方法ではないでしょうか。

フリーの復元ソフトに「DataRecovery」というものがあります。このフリーソフトには「削除したファイル」の名前を時間をかけず簡単に消去できる機能が付いています。

『DataRecovery』
http://www.vector.co.jp/soft/win95/util/se382922.html

■使い方
起動させる→該当ドライブをクリック→[スキャン]ボタンをクリック→削除したファイルの表示完了→「目的のファイルが見つかりましたか?」と出てきたら[キャンセル]をクリック→名...続きを読む

QEXCELでA1セルに「13ヶ月」と入力すればA2セルに「1年1ヶ月」と表示されるようにしたい

EXCELで、「●ヶ月」を「●年●ヶ月」に変換する関数や計算式を入力したいです。

例えば、
A1セルに「13ヶ月」と入力すれば、
A2セルには「1年1カ月」と表示されるようにしたいです。

この場合、A2セルに入力するべき計算式を教えて頂けないでしょうか?

※もちろん、入力するのは上記例の「13ヶ月」だけではなく、「24ヶ月」とか「45ヶ月」とか、数値は色々です。

※この場合あまり関係ないかもしれませんが、一応バージョンはEXCEL2007です

よろしくお願いします。

Aベストアンサー

入力は文字でしょうか?
それとも数値で13と入力で表示形式が 0"ヶ月" ですか?
後者ならNo2の方の方法で解決します。
前者の場合はもうひと手間加えて
A2=TEXT(INT(LEFT(A1,LEN(A1)-2)/12),"0年;;")&TEXT(MOD(LEFT(A1,LEN(A1)-2)*1,12),"0ヶ月;;")


人気Q&Aランキング

おすすめ情報