[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『csvファイルの指定したセル値をxlsファイルの指定したセル値に転写したい。』(躯)
いつもお世話になっております。
ネットワーク上にある指定した2つのファイル(csvとxls)を開き、
csvファイル内の指定したセル値をxlsファイルの指定したセル値に転写するやり方をお教えください。
また、その指定するセル値が複数ある場合、そのセル値内で基準値から一番離れている値を転写をしたい。
CSVの指定セル 転写先のxlsの指定セル
H467 → H19
H573〜576 → H20
H474〜477 → H21
H515 → H22
H610〜613 → H23
説明不足で申し訳ございませんが、宜しくお願い致します。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
どの部分が知りたいのか解らんけど、 2つのファイルを開いて、下の作業をマクロ記録でもすれば良いんじゃないですか。
H467 → H19
H573〜576 → H20
H474〜477 → H21
H515 → H22
H610〜613 → H23
(BJ) 2019/06/06(木) 13:14
BJ様 ご返信ありがとうございます。
H573~576 などの複数データがある場合、
同行I列(I573~576)を参照し、最も0から離れている値を見つけた後に
その離れている値のH列のセルを矢印の先の別ファイルのセルにもってきたいのです。
当方の説明不足で申し訳ございません。
以上、よろしくお願い致します。
(躯) 2019/06/09(日) 09:35
I列には、離れている値の差分が書かれています。
(躯) 2019/06/09(日) 09:36
これは、わからないけど
>ネットワーク上にある指定した2つのファイル(csvとxls)を開き、
これと
>H467 → H19
これは、できるということでしょうか。
その部分だけでも提示していただけませんか。
(マナ) 2019/06/09(日) 11:02
>H573〜576 → H20
これは、わからないけど
(行) ... E列(基準値) F列(上限値) G列(下限値) H列(実測値) I列(差分) : : : : : :
467 100 1 -1 99.900 -0.1
: : : : : :
573 500 10 -10 505.500 5.5 574 500 10 -10 499.000 -1 575 500 10 -10 501.000 1 576 500 10 -10 -510.005 -10.5
: : : : : :
上記のような形になっており、1つの計測ごとに空白行が入っております。
その中の計測した実測値の中の外れている値を判断(この場合ですと、H576)し、
H576を値をxlsファイルのセルH20に反映したいということです。
同じように、467のような1つ場合は、H467の値をそのままH19にもっていきたいということです。
(他の515や610~613も上記説明と同じように)
>ネットワーク上にある指定した2つのファイル(csvとxls)を開き、
これと
>H467 → H19
これは、できるということでしょうか。
その部分だけでも提示していただけませんか。
当方の知識不足により、できていませんのでお知恵を頂きたい所存です。
長文・駄文となりましたが、よろしくお願い致します。
(躯) 2019/06/09(日) 12:01
(マナ) 2019/06/09(日) 12:46
下記のようになりました。
Sub test()
Workbooks.Open Filename:= _ "\\サーバー\ファイル名.csv" With ActiveWindow .Top = 5.5 .Left = 423.25
End With
ActiveWindow.SmallScroll Down:=450 Range("H467").Select
Selection.Copy
Windows("ファイル名.xls").Activate Range("H19:J19").Select
ActiveSheet.Paste
Windows("ファイル名.csv").Activate ActiveWindow.SmallScroll Down:=93 Range("H573").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ファイル名.xls").Activate Range("H20:J20").Select
ActiveSheet.Paste
Windows("ファイル名.csv").Activate ActiveWindow.SmallScroll Down:=-78 Range("H477").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ファイル名.xls").Activate Range("H21:J21").Select
ActiveSheet.Paste
Windows("ファイル名.csv").Activate ActiveWindow.SmallScroll Down:=21 Range("H515").Select
Application.CutCopyMode = False
Selection.Copy
Windows("ファイル名.xls").Activate Range("H22:J22").Select
ActiveSheet.Paste
Windows("ファイル名.csv").Activate
ActiveWindow.SmallScroll Down:=120
Range("H611").Select Application.CutCopyMode = False
Selection.Copy
Windows("ファイル名.xls").Activate Range("H23:J23").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:= _ "\\サーバー名\ファイル名.xls", FileFormat:= _ xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False
End Sub
(躯) 2019/06/09(日) 14:38
(マナ) 2019/06/09(日) 15:03
下記のようになります。
==========
開始
↓
csvファイルを開く
↓
H467をコピー
↓
xlsファイルのH19に貼り付け
↓
H573をコピー
↓
xlsファイルのH20に貼り付け
↓
H477をコピー
↓
xlsファイルのH21に貼り付け
↓
H515をコピー
↓
xlsファイルのH22に貼り付け
↓
H611をコピー
↓
xlsファイルのH23に貼り付け
↓
名前を付けてサーバーに保存
↓
終了
==========
以上、よろしくお願いいたします。
(躯) 2019/06/09(日) 15:13
>csvファイルを開く
(マナ) 2019/06/09(日) 15:26
直接サーバーにあるcsvファイルを開きました。
(躯) 2019/06/09(日) 15:49
(マナ) 2019/06/09(日) 16:04
以下となります。
Workbooks.Open Filename:= _
"\\サーバー\ファイル名.csv"
(躯) 2019/06/09(日) 16:05
(マナ) 2019/06/09(日) 16:29
期待通りに開きました。
(躯) 2019/06/09(日) 16:32
>H467をコピー
>↓
>xlsファイルのH19に貼り付け
ここの部分は、どんなマクロになるかわかりますか。
(マナ) 2019/06/09(日) 16:39
以下となります。
Range("H467").Select
Selection.Copy
Windows("ファイル名.xls").Activate Range("H19").Select
ActiveSheet.Paste
(躯) 2019/06/09(日) 16:43
(マナ) 2019/06/09(日) 16:45
期待通りにコピペされました。
(躯) 2019/06/09(日) 16:52
>名前を付けてサーバーに保存
(マナ) 2019/06/09(日) 16:59
期待通りに保存できました。
(躯) 2019/06/09(日) 17:01
csvファイルを開く
↓
H467をコピー
↓
xlsファイルのH19に貼り付け
↓
H515をコピー
↓
xlsファイルのH22に貼り付け
↓
名前を付けてサーバーに保存
(マナ) 2019/06/09(日) 17:06
以下となります。
Workbooks.Open Filename:= _ "\\サーバー\ファイル名.csv"
Windows("ファイル名.csv").Activate Range("H467").Select
Selection.Copy
Windows("ファイル名.xls").Activate Range("H19").Select
ActiveSheet.Paste
Windows("ファイル名.csv").Activate Range("H515").Select
Selection.Copy
Windows("ファイル名.xls").Activate Range("H22").Select
ActiveSheet.Paste
ActiveWorkbook.SaveAs Filename:= _ "\\サーバー名\ファイル名.xls", FileFormat:= _ xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False
End Sub
(躯) 2019/06/09(日) 17:24
> H573〜576 → H20
I列は説明がありました。
J列以降は使用していますか?
(マナ) 2019/06/09(日) 17:44
L列以降なら使用していません。
(躯) 2019/06/09(日) 19:29
1)L573に、=I573^2
2)L576までコピー
3)M573に、=MAX(L573:L576)
4)N573に、=MATCH(M573,L573:L576,0)
5)O673に、=INDEX(H573:H576,N573)
(マナ) 2019/06/09(日) 19:35
ご説明ありがとうございます。
関数を使用せずにでは、実現不可能でしょうか…?
(躯) 2019/06/09(日) 20:53
不可能ではありません。
今の 躯さん にとって、関数を使う(作業セルを使う)のが、
一番わかりやすいマクロになると考えました。
逆にお尋ねしますが、関数を使うと何か問題でしょうか?
(マナ) 2019/06/09(日) 21:03
csvファイルが更新されることがあるからです。
(躯) 2019/06/09(日) 22:14
(マナ) 2019/06/09(日) 23:07
説明下手で申し訳ございません。
ここで使用しているcsvファイルは新しく作られる場合があり、
セル関数を使用すると新しく作られたcsvファイルに
その都度、書き込まないといけない必要がある為に避けたい。
という表現で伝わりますでしょうか。
(躯) 2019/06/10(月) 06:48
その操作をマクロで実行するとしてもですか?
csvファイルを開く
↓
セルに数式入力
↓
計算結果をコピー
↓
xlsファイルに貼り付け
↓
こんなマクロを提案したつもりでした。
まずは、手作業で、数式に問題ないか確認してからですが。
(マナ) 2019/06/10(月) 19:09
こちらの思い違いでした、其方のご提案で問題ございません。
ご教授の程、宜しくお願い致します。
(躯) 2019/06/10(月) 19:16
(マナ) 2019/06/10(月) 19:28
お返事が遅くなり、申し訳ございません。
L行が使用できないので1行ずらしM行から実施した上で、
上の数式を入力した結果、期待通りの結果が得られました。
以下、1行ずらし実施した数式です。 1)M573に、=I573^2
2)M576までコピー
3)N573に、=MAX(M573:M576)
4)O573に、=MATCH(N573,N573:M576,0)
5)P673に、=INDEX(H573:H576,O573)
(躯) 2019/06/11(火) 08:23
追加でご相談なのですが、
csvファイルを開く
↓
セルに数式入力
↓
計算結果をコピー
↓
xlsファイルに貼り付け ↓ 【追加】csvファイルのセルにいれた数式を削除
については可能でしょうか?
(躯) 2019/06/11(火) 17:35
では、式の意味は理解できていますか。
そんな関数を使用しても、マクロは同じなので
自分が理解できる式にするべきです。
>【追加】csvファイルのセルにいれた数式を削除
可能ですが、
CSVは、保存しないで閉じるとよいのでは?
(マナ) 2019/06/11(火) 18:53
>では、式の意味は理解できていますか。
MAX式 … 最大値を取得
MATCH式 … 最大値が何番目にあるのかを取得
INDEX式 … MATCH式で求めた場所を取得
で合ってますでしょうか。
>可能ですが、
CSVは、保存しないで閉じるとよいのでは?
保存しないで閉じることを失念しておりました。
(躯) 2019/06/11(火) 19:19
1)M573〜P573セルに手作業で数式を入力 2)正しい結果がでていることを確認 3)ここからマクロの記録開始 4)M573セルを選択 5)F2キーを押す 6)そのままEnterを押す 7)N573セルを選択 8)F2キーを押す 9)そのままEnterを押す 10)O573セルを選択 11)F2キーを押す 12)そのままEnterを押す 13)P573セルを選択 14)F2キーを押す 15)そのままEnterを押す 16)マクロの記録終了
これが数式を入力するマクロです。
記録された結果を提示してください。
(マナ) 2019/06/11(火) 20:07
以下になりました。
Sub Macro1()
Range("M573").Select ActiveCell.FormulaR1C1 = "=RC[-4]^2" Range("N573").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O573").Select ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P573").Select ActiveCell.FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])" Range("P574").Select
End Sub
(躯) 2019/06/11(火) 20:12
〇〇.Select
ActiveCell.△△△
こんな感じの繰り返しですが
これは、1行にまとめることができます。
〇〇.△△△
といった感じです。
今回の場合は,こうなります。
Range("M573").FormulaR1C1 = "=RC[-4]^2" Range("N573").FormulaR1C1 = "=MAX(RC[-1]:R[3]C[-1])" Range("O573").FormulaR1C1 = "=MATCH(RC[-1],RC[-2]:R[3]C[-2],0)" Range("P573").FormulaR1C1 = "=INDEX(RC[-8]:R[3]C[-8],RC[-1])"
つまり
セル..FormulaR1C1 = "=数式"
という構文です。
数式の部分は慣れが必要なので、
今回のように、マクロの記録をそのまま利用するとよいです。
で、M列ですが、実際は、M576まで入力したいので
手作業ならコピーしてもよいのですが
マクロだと、同じ式なら1度に入力できます。
こんな感じです。
確認してもいてください。
Range("M573:M576").FormulaR1C1 = "=RC[-4]^2"
(マナ) 2019/06/11(火) 21:21
コメントを頂戴する前に自分で模索しましたら上手くいきました!
長らくご丁寧に大変ありがとうございました!!
(躯) 2019/06/11(火) 23:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.