Indexへ
(3115)//【3112】→(3124)
------------------------
【タイトル】教えてください お願いします
【記事番号】 3112 (*)
【 日時 】04/04/05 22:05
【 発言者 】新ちゃん

教えてください。
jwwで平面図を作成後、柱の数、照明器具、コンセントの数、等を自動でかぞえて、エクセルで集計、計算したいのですがどのようにしたらいいのでしょうか?
どなたかご存知の方お願いします。


Indexへ
(3112)←【3124】→(3127)
------------------------
【タイトル】Re(1):教えてください お願いします
【記事番号】 3124 (3112)
【 日時 】04/04/06 09:35
【 発言者 】poaro

▼新ちゃんさん:
>教えてください。
>jwwで平面図を作成後、柱の数、照明器具、コンセントの数、等を自動でかぞえて、エクセルで集計、計算したいのですがどのようにしたらいいのでしょうか?
>どなたかご存知の方お願いします。

コンニチワ
範囲の中に文字集計が有ります。
別レイヤに同一種の物に同じ文字を振って集計したらどうでしょうか?
面倒かな?


Indexへ
(3124)←【3127】→(3128)
------------------------
【タイトル】Re: 教えてください お願いします
【記事番号】 3127 (3112)
【 日時 】04/04/06 11:37
【 発言者 】makuma makuma@desu.ne.jp_NOSPAM

>jwwで平面図を作成後、柱の数、照明器具、コンセントの数、等を自動でかぞえて、エクセルで集計、計算したいのですがどのようにしたらいいのでしょうか?

すでに作図済みの図面だとちょっと骨ですが、柱、照明器具、コンセント等をそれぞれブロック図形にしておくと範囲コマンドの集計で集計できます。


Indexへ
(3127)←【3128】→(3129)
------------------------
【タイトル】Re(1): 教えてください お願いします
【記事番号】 3128 (3127)
【 日時 】04/04/06 13:09
【 発言者 】新ちゃん

▼makumaさん:
>>jwwで平面図を作成後、柱の数、照明器具、コンセントの数、等を自動でかぞえて、エクセルで集計、計算したいのですがどのようにしたらいいのでしょうか?
>
>すでに作図済みの図面だとちょっと骨ですが、柱、照明器具、コンセント等をそれぞれブロック図形にしておくと範囲コマンドの集計で集計できます。

ありがとうございました。
早速実行してみました。
今迄ペンを片手に数えていたのがアナログ的だと実感しました。

ブロック化したまま図形登録は出来ないものでしょうか?
また、エクセルでの計算方法がわかりません。
度々恐縮ですが教えてください。
お願いします。


Indexへ
(3128)←【3129】→(3130)
------------------------
【タイトル】Re: Re(1): 教えてください お願いします
【記事番号】 3129 (3128)
【 日時 】04/04/06 16:27
【 発言者 】makuma makuma@desu.ne.jp_NOSPAM

>ブロック化したまま図形登録は出来ないものでしょうか?

JWSを使用すれば登録できます。JWKはJWCの図形形式ですのでブロック図形は登録できません。

>また、エクセルでの計算方法がわかりません。

Excelでの計算とはどのようなことでしょうか?
JWW上では集計までしかしませんので、その数値をExcelにコピーするか外部変形を利用して書き写すか、しかありませんが?


Indexへ
(3129)←【3130】→(3132)
------------------------
【タイトル】Re(1): Re(1): 教えてください お願いします
【記事番号】 3130 (3129)
【 日時 】04/04/06 17:51
【 発言者 】新ちゃん

▼makumaさん:
>>ブロック化したまま図形登録は出来ないものでしょうか?
>
>JWSを使用すれば登録できます。JWKはJWCの図形形式ですのでブロック図形は登録できません。
>
>>また、エクセルでの計算方法がわかりません。
>
>Excelでの計算とはどのようなことでしょうか?
>JWW上では集計までしかしませんので、その数値をExcelにコピーするか外部変形を利用して書き写すか、しかありませんが?

柱、照明器具、コンセントなどの数値から、大まかな石数、照明関係の見積、コンセントの数による電気配線の工数などが積算したいのです。
JWWと積算に使われるエクセル(他にもありますが・・・)を連携できないものでしょうか?
ご存知でしたら教えてください。
お願いします。


Indexへ
(3130)←【3132】→(3154)
------------------------
【タイトル】Re: Re(1): Re(1): 教えてください お願いします
【記事番号】 3132 (3130)
【 日時 】04/04/06 20:45
【 発言者 】makuma makuma@desu.ne.jp_NOSPAM

>柱、照明器具、コンセントなどの数値から、大まかな石数、照明関係の見積、コンセントの数による電気配線の工数などが積算したいのです。
>JWWと積算に使われるエクセル(他にもありますが・・・)を連携できないものでしょうか?

この辺りの話になってくると、外部変形の話になってきますね。
工夫すれば十分可能です。
ExcelはVBAを持ってますのでこれに外部変形としての作業をさせれば良いです。

現にExcelVBAを利用した外部変形は多数存在します。
VBAから勉強が必要ですが、ご存じならこのくらいの作業ならそれほど難しくないと思いますよ。


Indexへ
(3132)←【3154】→(3137)
------------------------
【タイトル】Re(1): Re(1): Re(1): 教えてください お願いします
【記事番号】 3154 (3132)
【 日時 】04/04/07 18:12
【 発言者 】新ちゃん

▼makumaさん:
>>柱、照明器具、コンセントなどの数値から、大まかな石数、照明関係の見積、コンセントの数による電気配線の工数などが積算したいのです。
>>JWWと積算に使われるエクセル(他にもありますが・・・)を連携できないものでしょうか?
>
>この辺りの話になってくると、外部変形の話になってきますね。
>工夫すれば十分可能です。
>ExcelはVBAを持ってますのでこれに外部変形としての作業をさせれば良いです。
>
>現にExcelVBAを利用した外部変形は多数存在します。
>VBAから勉強が必要ですが、ご存じならこのくらいの作業ならそれほど難しくないと思いますよ。

poaroさん、makumaさん、コジマさん他皆さんありがとうございます。
皆さんのおかげで光が見えてきました。
外部変形についてしばらく勉強しなおしてから、またお邪魔します。
ありがとうございました。


Indexへ
(3154)←【3137】→(3155)
------------------------
【タイトル】Rubyでエクセルと連携
【記事番号】 3137 (3130)
【 日時 】04/04/07 09:29
【 発言者 】コジマ

>
>柱、照明器具、コンセントなどの数値から、大まかな石数、照明関係の見積、コンセントの数による電気配線の工数などが積算したいのです。
>JWWと積算に使われるエクセル(他にもありますが・・・)を連携できないものでしょうか?
>ご存知でしたら教えてください。
>お願いします。

牛渡さんのサイトの外部変形作成講座のSamp3_1batとSamp3_1rbを一部修正すれば、比較的簡単にエクセルとの連携を自分仕様に変更できます。(ActiveRubyスクリプト)

この外部変形を実行するには、ActiveRubyのインストールが必要です。
牛渡さんのサイトで入手できます。
 http://homepage2.nifty.com/ushiwatari/

以下、参考までに記載します。
外部変形を実行する前に、価格.xlsという名前で、単価表をバッチファイル及びスクリプトファイルと同じフォルダに保存しておかなければなりません。

コピペされたときは、全角スペースを半角スペースに一括置換してください。

資材積算.xlsは図面と同じフォルダに作成されます。

この場をかりて、牛渡さんに感謝いたします。


◎バッチファイル(ファイル名 資材積算.bat)

REM  Excel操作 外部変形 SAMP 3_1
echo off
REM #jww
REM #cd
REM #hf                編集中のファイルのフルパスを書き出す
REM #h1
REM #zz
REM #e
copy jwc_temp.txt temp.txt > nul
cscript //nologo 資材積算.rb temp.txt > jwc_temp.txt
pause

◎スクリプトファイル(ファイル名 資材積算.rb)

#ブロック図形 外部変形 Ruby スクリプト
require 'win32ole'
# --- メイン ---
def main
 kakaku = "価格.xls"
 mitsumori = "資材積算.xls"
 excel = WIN32OLE.new('Excel.Application')    # Excel を起動
 begin
 WIN32OLE.const_load( excel )            # 定数をロード
 excel.visible = true
 kosu_hyo, outPath = read_kosu_hyo()        
 # jwc_temp.txt からブロック図形の個数とパスを読む
 myPath = $0.gsub( /(^.*\\).*$/, "\\1" ) # このスクリプトがあるパス名
 kakaku_hyo = read_kakaku_hyo( excel, myPath + kakaku )
 write_mitsumori( excel, kosu_hyo, kakaku_hyo, outPath + mitsumori )
 print "h#" + outPath + mitsumori + " を作成しました\n"
 ensure # 例外処理
 excel.displayAlerts = false     # 編集中のファイルがあっても破棄する
 excel.quit()                # Excel を終了
 end
end
# --- jwc_temp.txt からブロック図形の個数とパスを読む ---
def read_kosu_hyo
  kosu_hyo = Hash.new    # 個数カウント用の連想配列を初期化
  while ARGF.gets
    case $_
    when /^BL/
    words = split

       kataban = words[3][ 1..-1 ]
        if kosu_hyo.has_key?( kataban )
         kosu_hyo[ kataban ] += 1
        else
         kosu_hyo[ kataban ] = 1
        end
    when /^file=/
      chomp!    # 行末の改行を削除
      outPath = gsub( /^file=(.*\\).*$/, "\\1" )
          # 編集中の図面ファイルのパスを取得
    end
   end
  return kosu_hyo, outPath
end
# --- 価格表Excelファイルから、ブロック図形の単価を読む ---
def read_kakaku_hyo( excel, xlsName )  # 価格表Excelファイルを開く
  kakaku_hyo = Hash.new        # 単価表の連想配列を初期化
  catalog = excel.workbooks.open( xlsName )
  begin
   catalogArea = catalog.activeSheet.usedRange
  for rowIndex in 1 .. catalogArea.rows.count
   row = catalogArea.rows( rowIndex )
    if row.cells( 1, 1 ).value != "名称"
      # "名称"の行はタイトル行としてスキップ
      kataban = row.cells( 1, 1 ).value
      kakaku_hyo[ kataban ] = Array.new# 単価格納用の配列を初期化
       for columnIndex in 2..row.columns.count
         column = row.cells( 1, columnIndex )
         kakaku_hyo[ kataban ].push column.value
         # 単価を格納する
       end
    end
  end
  ensure
  catalog.close  # 価格表Excelファイルを閉じる
 end
 return kakaku_hyo
end
# --- 見積りファイルの書き込み ---
def write_mitsumori( excel, kosu_hyo, kakaku_hyo, xlsName )
  excel.SheetsInNewWorkbook = 1# シートが1枚だけ含まれたブックを作成
  workbook = excel.Workbooks.Add()
  begin
  worksheet = workbook.Worksheets(1)
  title = worksheet.range( worksheet.cells( 1, 1 ), worksheet.cells( 1, 4 ))      # タイトル行
  title.value = ["名称", "単価", "数量", "価格" ]
  title.horizontalAlignment = WIN32OLE::XlCenter
  row = 2
  for kataban in kosu_hyo.keys# 個数表から名称を一つずつ取り出す
    if kakaku_hyo.has_key?( kataban )
      tanka = kakaku_hyo[ kataban ][0]
      kosu = kosu_hyo[ kataban ]
      worksheet.cells( row, 1 ).value = kataban# 見積り表の書き込み
      worksheet.cells( row, 2 ).value = tanka
      worksheet.cells( row, 3 ).value = kosu
      worksheet.cells( row, 4 ).formulaR1C1 = "=RC[-2]*RC[-1]"
    else
      worksheet.cells( row, 1 ).value = kataban
      worksheet.cells( row, 2 ).value = "金額が不明です"
    end
    row += 1
    end
    worksheet.columns( 2 ).numberFormatLocal = "\\#,##0;\\-#,##0"
    # 書式を「通貨」に設定
    worksheet.columns( 4 ).numberFormatLocal = "\\#,##0;\\-#,##0"
    worksheet.cells( row, 1 ).value = "合計"
    # 合計の数式書き込み
    worksheet.cells( row, 4 ).formulaR1C1 = ( "=SUM(R[" + String( 2 - row ) + "]C:R[-1]C" )
    area = worksheet.usedRange
    # 罫線を描く
    borderAll( area, WIN32OLE::XlThin )
    borderAround( area, WIN32OLE::XlMedium )
    area.rows( 1 ).borders( WIN32OLE::XlBottom ).lineStyle = WIN32OLE::XlDouble
    workbook.close( true, xlsName )    # 書き込んだブックを保存する
    ensure
    excel.workbooks.close()
    end
end
# --- マス目罫線の書き込み ---
def borderAll( area, weight )
    area.borders( WIN32OLE::XlTop ).weight = weight
    area.borders( WIN32OLE::XlBottom ).weight = weight
    area.borders( WIN32OLE::XlLeft ).weight = weight
    area.borders( WIN32OLE::XlRight ).weight = weight
end
# --- 囲み罫線の書き込み ---
def borderAround( area, weight )
    area.borders( WIN32OLE::XlEdgeTop ).weight = weight
    area.borders( WIN32OLE::XlEdgeBottom ).weight = weight
    area.borders( WIN32OLE::XlEdgeLeft ).weight = weight
    area.borders( WIN32OLE::XlEdgeRight ).weight = weight
end
main()


Indexへ
(3137)←【3155】//(3117)
------------------------
【タイトル】Re(1):Rubyでエクセルと連携
【記事番号】 3155 (3137)
【 日時 】04/04/07 18:15
【 発言者 】新ちゃん

▼コジマさん:
>>
>>柱、照明器具、コンセントなどの数値から、大まかな石数、照明関係の見積、コンセントの数による電気配線の工数などが積算したいのです。
>>JWWと積算に使われるエクセル(他にもありますが・・・)を連携できないものでしょうか?
>>ご存知でしたら教えてください。
>>お願いします。
>
>牛渡さんのサイトの外部変形作成講座のSamp3_1batとSamp3_1rbを一部修正すれば、比較的簡単にエクセルとの連携を自分仕様に変更できます。(ActiveRubyスクリプト)
>
>この外部変形を実行するには、ActiveRubyのインストールが必要です。
>牛渡さんのサイトで入手できます。
> http://homepage2.nifty.com/ushiwatari/
>
>以下、参考までに記載します。
>外部変形を実行する前に、価格.xlsという名前で、単価表をバッチファイル及びスクリプトファイルと同じフォルダに保存しておかなければなりません。
>
>コピペされたときは、全角スペースを半角スペースに一括置換してください。
>
>資材積算.xlsは図面と同じフォルダに作成されます。
>
>この場をかりて、牛渡さんに感謝いたします。
>
>
>◎バッチファイル(ファイル名 資材積算.bat)
>
>REM  Excel操作 外部変形 SAMP 3_1
>echo off
>REM #jww
>REM #cd
>REM #hf                編集中のファイルのフルパスを書き出す
>REM #h1
>REM #zz
>REM #e
>copy jwc_temp.txt temp.txt > nul
>cscript //nologo 資材積算.rb temp.txt > jwc_temp.txt
>pause
>
>◎スクリプトファイル(ファイル名 資材積算.rb)
>
>#ブロック図形 外部変形 Ruby スクリプト
>require 'win32ole'
># --- メイン ---
>def main
> kakaku = "価格.xls"
> mitsumori = "資材積算.xls"
> excel = WIN32OLE.new('Excel.Application')    # Excel を起動
> begin
> WIN32OLE.const_load( excel )            # 定数をロード
> excel.visible = true
> kosu_hyo, outPath = read_kosu_hyo()        
> # jwc_temp.txt からブロック図形の個数とパスを読む
> myPath = $0.gsub( /(^.*\\).*$/, "\\1" ) # このスクリプトがあるパス名
> kakaku_hyo = read_kakaku_hyo( excel, myPath + kakaku )
> write_mitsumori( excel, kosu_hyo, kakaku_hyo, outPath + mitsumori )
> print "h#" + outPath + mitsumori + " を作成しました\n"
> ensure # 例外処理
> excel.displayAlerts = false     # 編集中のファイルがあっても破棄する
> excel.quit()                # Excel を終了
> end
>end
># --- jwc_temp.txt からブロック図形の個数とパスを読む ---
>def read_kosu_hyo
>  kosu_hyo = Hash.new    # 個数カウント用の連想配列を初期化
>  while ARGF.gets
>    case $_
>    when /^BL/
>    words = split
>
>       kataban = words[3][ 1..-1 ]
>        if kosu_hyo.has_key?( kataban )
>         kosu_hyo[ kataban ] += 1
>        else
>         kosu_hyo[ kataban ] = 1
>        end
>    when /^file=/
>      chomp!    # 行末の改行を削除
>      outPath = gsub( /^file=(.*\\).*$/, "\\1" )
>          # 編集中の図面ファイルのパスを取得
>    end
>   end
>  return kosu_hyo, outPath
>end
># --- 価格表Excelファイルから、ブロック図形の単価を読む ---
>def read_kakaku_hyo( excel, xlsName )  # 価格表Excelファイルを開く
>  kakaku_hyo = Hash.new        # 単価表の連想配列を初期化
>  catalog = excel.workbooks.open( xlsName )
>  begin
>   catalogArea = catalog.activeSheet.usedRange
>  for rowIndex in 1 .. catalogArea.rows.count
>   row = catalogArea.rows( rowIndex )
>    if row.cells( 1, 1 ).value != "名称"
>      # "名称"の行はタイトル行としてスキップ
>      kataban = row.cells( 1, 1 ).value
>      kakaku_hyo[ kataban ] = Array.new# 単価格納用の配列を初期化
>       for columnIndex in 2..row.columns.count
>         column = row.cells( 1, columnIndex )
>         kakaku_hyo[ kataban ].push column.value
>         # 単価を格納する
>       end
>    end
>  end
>  ensure
>  catalog.close  # 価格表Excelファイルを閉じる
> end
> return kakaku_hyo
>end
># --- 見積りファイルの書き込み ---
>def write_mitsumori( excel, kosu_hyo, kakaku_hyo, xlsName )
>  excel.SheetsInNewWorkbook = 1# シートが1枚だけ含まれたブックを作成
>  workbook = excel.Workbooks.Add()
>  begin
>  worksheet = workbook.Worksheets(1)
>  title = worksheet.range( worksheet.cells( 1, 1 ), worksheet.cells( 1, 4 ))      # タイトル行
>  title.value = ["名称", "単価", "数量", "価格" ]
>  title.horizontalAlignment = WIN32OLE::XlCenter
>  row = 2
>  for kataban in kosu_hyo.keys# 個数表から名称を一つずつ取り出す
>    if kakaku_hyo.has_key?( kataban )
>      tanka = kakaku_hyo[ kataban ][0]
>      kosu = kosu_hyo[ kataban ]
>      worksheet.cells( row, 1 ).value = kataban# 見積り表の書き込み
>      worksheet.cells( row, 2 ).value = tanka
>      worksheet.cells( row, 3 ).value = kosu
>      worksheet.cells( row, 4 ).formulaR1C1 = "=RC[-2]*RC[-1]"
>    else
>      worksheet.cells( row, 1 ).value = kataban
>      worksheet.cells( row, 2 ).value = "金額が不明です"
>    end
>    row += 1
>    end
>    worksheet.columns( 2 ).numberFormatLocal = "\\#,##0;\\-#,##0"
>    # 書式を「通貨」に設定
>    worksheet.columns( 4 ).numberFormatLocal = "\\#,##0;\\-#,##0"
>    worksheet.cells( row, 1 ).value = "合計"
>    # 合計の数式書き込み
>    worksheet.cells( row, 4 ).formulaR1C1 = ( "=SUM(R[" + String( 2 - row ) + "]C:R[-1]C" )
>    area = worksheet.usedRange
>    # 罫線を描く
>    borderAll( area, WIN32OLE::XlThin )
>    borderAround( area, WIN32OLE::XlMedium )
>    area.rows( 1 ).borders( WIN32OLE::XlBottom ).lineStyle = WIN32OLE::XlDouble
>    workbook.close( true, xlsName )    # 書き込んだブックを保存する
>    ensure
>    excel.workbooks.close()
>    end
>end
># --- マス目罫線の書き込み ---
>def borderAll( area, weight )
>    area.borders( WIN32OLE::XlTop ).weight = weight
>    area.borders( WIN32OLE::XlBottom ).weight = weight
>    area.borders( WIN32OLE::XlLeft ).weight = weight
>    area.borders( WIN32OLE::XlRight ).weight = weight
>end
># --- 囲み罫線の書き込み ---
>def borderAround( area, weight )
>    area.borders( WIN32OLE::XlEdgeTop ).weight = weight
>    area.borders( WIN32OLE::XlEdgeBottom ).weight = weight
>    area.borders( WIN32OLE::XlEdgeLeft ).weight = weight
>    area.borders( WIN32OLE::XlEdgeRight ).weight = weight
>end
>main()


poaroさん、makumaさん、コジマさん他皆さんありがとうございます。
皆さんのおかげで光が見えてきました。
外部変形についてしばらく勉強しなおしてから、またお邪魔します。
ありがとうございました。