みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ファイルメーカー10を使用しています。
Excelで以下のようなデータを持っています
氏名/品名 A B C
甲さん 10 20 25
乙さん 80 40 30
丙さん 25 60 70
を、ファイルメーカで
氏名 品名 数量
甲さん A 10
甲さん B 20
甲さん c 25
乙さん A 80
以下同様にしたく思います。
氏名は約200件、品名は約1000件あります。
良い方法がありますでしょうか?
某有名人が「データのインポートを3回繰り返せば完了」と書いてましたが、
どこだったか思い出せません(私、ボケってきたかも)
データのインポート
(マッチング)
EXCEL:氏名 → FM:氏名
EXCEL:品名A → FM:数量
フィールド内容の全置換[FM:品名 → "A"]
レコードを対象外に(以下のLOOPしか思いつかなかった、一括で出来そうだけど・・・)
LOOP
レコード/検索条件/ページへ移動[最初の]
レコードを対象外に
レコード/検索条件/ページへ移動[次の;最後まできたら終了]
END LOOP
これを後2回繰り返し
変更箇所は EXCEL:品名B → FM:数量/フィールド内容の全置換[FM:品名 → "B"]
EXCEL:品名C → FM:数量/フィールド内容の全置換[FM:品名 → "C"]
最後に、全レコードを表示で完了
こんなかんじでどうでしょうか!?
本当にボケてきた(泣)
[誤] データのインポート
[正] レコードのインポート
品名が1000あるとインポートは1000回で、現実的で無いですね。
頻繁でない作業ならば、
エクセルシートで、品名行を選択し、2シート目に行列を入れ替えてペースト(品名のみが1列目に立て並び)
シートをFMへ変換(エクセルシートのファイルをFMへドラッグ&ドロップ)
1回目は、1シート目を、1行目はフィールド名として取り込む(cross.fm7, cross.fm12と命名)
2回目は、2シート目を、1行目をフィールド名として取り込む(items.fm7, items.fm12と命名)
cross ファイルに、次の2フィールドを追加(adv版ならば、既存のファイルからコピペ可)
品名 [グローバルフィールド]
数量 [計算フィールド、Evaluate ( 品名 )]
loopでインポート
で、1クリックで出来そうです。
品名は、items ファイルより値一覧を作成して、参照しています。
スクリプトは、
レイアウト切り替え [ 「氏名品名」 (氏名品名) ]
変数を設定 [ $n; 値:1 ]
Loop
フィールド設定 [ 集計::品名; GetValue ( ValueListItems ( Get ( ファイル名 ) ; "品名一覧" ) ; $n ) ]
レコードのインポート [ ソース: 「file:集計.fp7」; ターゲット: 「氏名品名」; 方法: 追加; 文字セット: 「シフト JIS」;フィールドデータのインポート順:
ソースフィールド 1 のインポート 氏名品名::氏名_品名
ソースフィールド 5 のインポート 氏名品名::品名
ソースフィールド 6 のインポート 氏名品名::数量 ][ ダイアログなし ]
Exit Loop If [ Let ($n = $n + 1 ;$n > ValueCount ( ValueListItems ( Get ( ファイル名 ) ; "品名一覧" ) )) ]
End Loop
その他の設定は、サンプルファイルを参照して下さい。同じ構造のファイルを作れば、cross, items ファイルを同名のファイルと入れ替えれば、そのまま動くはずです。
https://dl.dropboxusercontent.com/u/926 … -h1875.zip
Last edited by Shin (2014-07-21 17:42:30)
Offline
FMは難しい(汗)
EXCEL(2007版)だと10行マクロで出来たでと・・
リンク張っときます
ご連絡が遅くなりました。
解決しました。
FMでの解決方法も大変勉強になりました。excelのマクロもこちらも確認のために使わせて頂きました。
ありがとうございました。
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 514.05 KiB (Peak: 518.96 KiB) ]