1)EXCELで作成した図の情報を集計したい。
  EXCELでフロアのレイアウト図を作るとします。
  その時図は既に別シートに用意されています。図を作成する時には部品(机の絵やキャビネットの絵)のシートよりコピーなどで作図用のシートにコピーし、作成します。
  作図のシートで部品をいくつつかっているかの集計を行いたいのですが、可能でしょうか?
  集計用のシートに結果がでるのでもいいですし、作図のシートに集計ボタンをつくり押すと集計結果が作図シートにでるのでもどちらでもよいです。

2)作図の微調整
  上記で作図した部品を範囲指定をして、ぴたりと隣接させるような機能はありませんか?手で行うと微妙にずれてしまいます。
  位置あわせは、左端の部品に合わせるとか、指定ができるとありがたいのですが・・
        宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

各部品には名前をつけます。

(当然ついている?)それとシート『集計』を追加します。
シート『集計』に部品個数を名前単位に合計して表示します。ショートカットキーに登録したほうがいいでしょう。ボタンを作るとボタンまで数えてしまうかもしれません。標準モジュールに貼り付けます。

'部品の個数を数える(Ctrl-Z)
Sub ShapesCount()
  Dim objName() As String '部品の名前
  Dim objCount() As Integer '部品の個数
  Dim objKind As Integer '部品の種類(配列のインデックス)
  Dim cot As Integer '部品カウンタ
  Dim schKind As Integer '部品配列のインデックス
  Dim k As Integer 'カウンタ

  'アクティブシートの全図形を調べで部品ごとに集計する
  For cot = 1 To ActiveSheet.Shapes.Count
   schKind = 0
   For k = 1 To objKind
    '部品名配列のどれに該当するか探す
    If ActiveSheet.Shapes(cot).Name = objName(k) Then
     schKind = k '見つけたインデックス
     Exit For
    End If
   Next

   If schKind > 0 Then
    '部品名配列に見つかれば加算する
    objCount(schKind) = objCount(schKind) + 1
   Else
    '部品名配列になければ新しく配列を追加する
    objKind = objKind + 1
    ReDim Preserve objName(objKind) '再宣言
    ReDim Preserve objCount(objKind) '再宣言
    objName(objKind) = ActiveSheet.Shapes(cot).Name '部品名をセット
    objCount(objKind) = 1 '個数は1
   End If
  Next

  With Worksheets("集計") '『集計』シートに書き出す
   .Columns("A:B").ClearContents '前回集計を消去
   .Range("A1") = "部品" '表題
   .Range("B1") = "個数" '表題
   For cot = 1 To objKind
    .Range("A" & cot + 1) = objName(cot) '部品名
    .Range("B" & cot + 1) = objCount(cot) '部品の個数
   Next
  End With
End Sub

シート上の図形を揃える機能がないのも不思議ですね。
下は殆どお遊びマクロです。部品を並べたい位置に適当に配置して実行して下さい。
選択した部品の各右位置、横中央、左、下、縦中央、上位置の誤差を計算して一番誤差の少ない箇所を基準に自動的に揃えます。左端を揃えて縦に並べるなら、その感じが分かるようにテキトーに並べてマクロを実行して下さい。シート『集計』のD1セルにセットした値で図形間隔を指定できます。ゼロで密着します。フォームの上にコントロールを作ったときの、コントロールを揃える機能をシート上で行っているつもりです。標準モジュールに貼り付けます。(Excel97、2000で確認済みです)
それにしても長すぎる?いいのかな?

'基準位置を求めて図形を結合する(Ctrl-A)
Sub ShapeAutoSet()
  Dim pot() As Double '図形の座標
  Dim srt() As Double 'ソート用配列
  Dim ord() As Double '図形の並び順
  Dim sCot As Integer '図形の数
  Dim s As Integer '図形のカウンタ
  sCot = Selection.ShapeRange.Count
  ReDim pot(sCot, 8) '右、横中央、左、下、縦中央、上の順

  For s = 1 To sCot
   With Selection.ShapeRange(s)
    pot(s, 1) = .Left + .Width
    pot(s, 2) = .Left + .Width / 2
    pot(s, 3) = .Left
    pot(s, 4) = .Top + .Height:
    pot(s, 5) = .Top + .Height / 2
    pot(s, 6) = .Top
    pot(s, 7) = .Height
    pot(s, 8) = .Width
   End With
  Next
  '誤差を求め、最小の要素の位置で揃えるようにする
  Dim gosa(6) As Double '右、横中央、左、下、縦中央、上を基準にした誤差
  Dim j As Integer '基準を変える時のカウンタ
  For j = 1 To 6
   For s = 2 To sCot
    gosa(j) = gosa(j) + (pot(s, j) - pot(1, j)) ^ 2
   Next
  Next
  '最小の誤差は右、横中央、左、下、縦中央、上のどれ?
  Dim idx As Integer '最小の誤差のインデックス
  Dim Kijyun As Double '並べる順を決める要素
  idx = 1
  For s = 2 To 6
   If gosa(s) < gosa(idx) Then
    idx = s: Kijyun = 4: If idx >= 4 Then Kijyun = 1
   End If
  Next
  '図形の処理順を決める
  ReDim srt(sCot) 'ソート用配列
  ReDim ord(sCot) '画面上の並び順
  Dim wk1 As Double 'ワーク配列(値)
  Dim wk2 As Integer 'ワーク配列(インデックス)

  For s = 1 To sCot
   ord(s) = s: srt(s) = pot(s, Kijyun)
  Next
   '処理順を決める
   s = sCot
   While s > 0
    For j = 1 To s
     If srt(j - 1) > srt(j) Then
      wk1 = srt(j - 1): srt(j - 1) = srt(j): srt(j) = wk1
      wk2 = ord(j - 1): ord(j - 1) = ord(j): ord(j) = wk2
     End If
    Next
    s = s - 1
   Wend

  '密接して並べる
  Dim joinTop As Double '図形を結合する上位置
  Dim joinLeft As Double '図形を結合する左位置
  Dim delta As Double '指定した間隔
  delta = Worksheets("集計").Range("D1")
  joinTop = pot(ord(1), 6)
  joinLeft = pot(ord(1), 3)
  For s = 2 To sCot
   Select Case idx
    Case 1, 2, 3 '上から下に並ぶ
     joinTop = joinTop + pot(ord(s - 1), 7) + delta
     joinLeft = pot(ord(1), 3) + (pot(ord(1), 8) - pot(ord(s), 8)) * (3 - idx) / 2
    Case 4, 5, 6 '左から右に並ぶ
     joinTop = pot(ord(1), 6) + (pot(ord(1), 7) - pot(ord(s), 7)) * (6 - idx) / 2
     joinLeft = joinLeft + pot(ord(s - 1), 8) + delta
   End Select
   Selection.ShapeRange(ord(s)).Top = joinTop
   Selection.ShapeRange(ord(s)).Left = joinLeft
  Next
End Sub
    • good
    • 0

> 記で作図した部品を範囲指定をして、ぴたりと隣接させるような機能はありませんか?



こちらの方だけ。

「図形描画」のツールバーに「図形の調整」というメニューがあります。ここの
「位置合わせ」をクリックして、「図形」が選択されている状態にしてください。

図形の移動やサイズの変更が、隣接している図形の座標をベースにした動作に
なります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

Q(Excel)エクセルのバージョンごとの使用可能関数リストがあるサイト

(Excel)エクセルのバージョンごとの使用可能関数リストがあるサイト

Excel2007でIFERROR関数などを使っていました
しかし、以前のExcelバージョンだと使えないようです。
そこで、どの関数がどのExcelバージョンから使用可能か?
というリストのようなものを掲載しているサイトはありますか?

Aベストアンサー

下記ページで2007で追加された関数が解ります。

Excel(エクセル)基本講座:Excel(エクセル)関数一覧表
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/itiran.html

Q複数シートを集計したい(別シートへ集計結果を表示させたい)

シートごとに月別の取引先別商品別の計画と実績が入っています。
(※シートフォーマット参照)
この表に関してはすでに数式を組んでいるのですが、この取引先別の複数シートのデータを
一つに集計する別シートを作成したいです。(※合計フォーマット参照)
※取引先CDは7桁、商品CDは12桁

それぞれのシートの下のほうに数量、売上、仕入、粗利益(売上@、仕入@は数量で割る)の合計欄を設けているのでその数字を集計した別シートへ表示させたいです。

取引先別のシートのフォーマットは同じですが、取引先ごとに商品数が違う為、合計欄の行数が異なります。
複雑すぎて、関数でやったら良いのかマクロでやったら良いのか?
また、それぞれの場合どういった関数を組めばorマクロを組めばご教授願います。

Aベストアンサー

No4です。
No7は無視してください。
エラーが発生する原因は、セルの内容に数値でないものが設定されていることと考えられます。
数値でないセルを検出時、合計シートのそのセルのアドレス(行列)と内容をエラー表示するようにしました。
エラーメッセージが表示されたセルの内容をご確認ください。
又、データの作成されていない月については、データの加算をしないようにしました。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
下記URLに修正版を登録しました。

http://climbi.com/b/9943/2

実際に変えたのは、
'エリア合計
Private Sub AreaGoukei(ByVal title As String, ByVal gs As Worksheet, ByVal rowstart As Long, ByRef rowg As Long)

'東・西日本合計
Private Sub AllGoukei(ByVal title As String, ByVal gs As Worksheet, ByVal rowE As Long, ByVal rowW As Long, ByRef rowg As Long)
の2つのプロシージャです。(これ以外は変えていませんで、この2プロシージャのみ置き換えても構いません)
これで、再確認してください。

No4です。
No7は無視してください。
エラーが発生する原因は、セルの内容に数値でないものが設定されていることと考えられます。
数値でないセルを検出時、合計シートのそのセルのアドレス(行列)と内容をエラー表示するようにしました。
エラーメッセージが表示されたセルの内容をご確認ください。
又、データの作成されていない月については、データの加算をしないようにしました。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
下記URLに修正版を登録しました。

http://climbi.com/b/9943/2

実際に変...続きを読む

QExcel関数のようなものはありますか?

こんにちは。まだプログラミングをほとんどしたことがないのでわからないことがあります。

現在Excelを使っていますがExcel関数は非常に使いやすいく重宝しています。
Excel関数は300種類ほどあるそうですが、C++やVB、C#、JAVAなどのプログラムにもExcel関数のようなものが
あらかじめ用意されているのでしょうか?
もしExcel関数の中で使いたいものがあり、そういう関数がソフト側で用意されてない場合は自作するしかないのでしょうか?

Aベストアンサー

office2003以降かつ.Netで作成という話しなら、事実上「ある」に等しいかもしれませんね。

.Netの場合、ライブラリとして読み込む側の言語についてあまり意識する必要はありません。(JAVAで本体のプログラムという訳にはいかないが)
とはいえ、プログラム経験が浅いのでしたら、VB.NETでやるというのが吉であると思います。(関数のみならず、マクロも利用できますのでね/office2003以降)

# 開発環境を安くならC#となります(Borland C#Builderなら無料)

参考URL:https://mypage.borland.co.jp/mypage/index.html?ret_to_semi_list=1&page_act=LI_REG

Qアンケート集計結果のグラフ作成

エクセル2007を使用しています。

「回答1を選んだ人は12歳、14歳、15歳、17歳でした」
「回答2を選んだ人は32歳、33歳、37歳、40歳でした」
「回答8を選んだ人は58歳、59歳、60歳、64歳でした」
上記のようなアンケート結果があったとします。
横軸の項目を1、2、8とし、縦軸に年齢をとって添付したようなグラフ(ペイントで作成しました)を作成したいのですが、方法がわかりません。
散布図で一見それっぽいものは作ることができるのですが、12-32-58、あるいは14-33-59で系列を作ってしまって、縦方向でドットの色・形が異なってしまいます。
また、横軸の項目を数字にすると、上記の例でいえば3、4、5、6、7も項目に含まれていしまいます。
必要な数字のみ項目に表示する方法も教えていただきたいです。
うまく文章がまとめられず恐縮ですが、わかるかたいらっしゃいましたら教えてください。

Aベストアンサー

[=3]"8";[=4]"";G/標準
これで3は8に4は空白にできたが3つ以上変更したいときの書式
だれか知恵袋で質問中なので教えてください。

QExcel関数について

Excel関数についての質問です。


Excel関数で、実際の仕事上でよく使う関数、ベスト5を教えてください。

また、覚えやすいコツなどがありましたら、教えて頂きたいです。

よろしくお願いします。

Aベストアンサー

うーん…仕事でどういったものを使いたいかによりますが…基本として、

SUM (サム)
指定範囲の合計を出します。
合計はサム!みたいにして覚えました。

--------------------------
IF
if文は結構使いました。
if(A1="","○","×")  ⇒ もし、A1が空なら,○を入力、違うなら×を入力
if(A1="","○",IF(A1="?","△","×")) ⇒ もし、A1が空だったら、○を入力、
                         それ以外で、?が入っていたら△を入力、それ以外は×を入力

とか、色々使えます^^
他の関数とも組み合わせて、とても便利です。

-------------------------
COUNTIF(カウントイフ)
条件にあったものの個数を数えます。

COUNTIF(A1:A5,"正解") 正解と書かれている個数を数えます

--------------------
TODAY
今日の日付が表示されます。
---------------------


他にも、平均を出すものや
便利なものはたくさんあります。
その都度、やりたいことを検索して
使っていくのがベストかな?と思います。
Excelの、挿入⇒関数のところで、
検索もできたはずです。


参考リンク
http://pc.nikkeibp.co.jp/pc21/tech/excel36/
http://matome.naver.jp/odai/2135607317537215601
http://www.enjoy-web-jp.com/jp/excel/excel00.html


また、セルの書式設定のユーザー定義はとても便利です。
書き方を勉強しておくと役立つかもしれません。

以上、参考まで

うーん…仕事でどういったものを使いたいかによりますが…基本として、

SUM (サム)
指定範囲の合計を出します。
合計はサム!みたいにして覚えました。

--------------------------
IF
if文は結構使いました。
if(A1="","○","×")  ⇒ もし、A1が空なら,○を入力、違うなら×を入力
if(A1="","○",IF(A1="?","△","×")) ⇒ もし、A1が空だったら、○を入力、
                         それ以外で、?が入っていたら△を入力、それ以外は×を入力

とか、色々使えます^^
他の関数とも組...続きを読む

Q集計結果だけを別シートにコピーするにはどうしたら良いのでしょうか?

初めまして、エクセル初心者です。
現在エクセルにてデータの集計を行っておりますが、困っております。過去に事例があるかと検索しましたが、検索条件が悪いのかヒットしない為、質問させて頂きました。

<経緯>
あるデータに同一項目がある為、集計機能を使って集計しました(集計機能をある人に昨日教えてもらいました)。
ソートし、同一項目を集計したのは良いのですが、集計結果をさらに集計する為に、集計結果だけを選択して別シートにコピーしたら、明細がくっついてくるのです。

<質問>
(1)集計結果だけをコピーする方法はあるのでしょうか(「形式を選択して貼り付け」をいろいろやりましたが上手くいきません・・・)。

(2)「・・・集計」と書かれている「集計」という大量の文字を削除するにはどうしたら良いのでしょうか。

 以上、幼稚な質問かもしれませんが、宜しくお願い致します。

Aベストアンサー

(1)集計機能の「集計」の項目だけ表示した状態を
コピーしたいこということでしょうか。
それなら下のURLを参考にしてみてください。
「ジャンプ」というコマンドを使うことで解決できると思います。
(2)置換で検索文字列を「集計」に置換後の文字列を
空白のまま実行してみてください。

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/syukei.html

QEXCEL ゴールシークの関数?

EXCEL ゴールシークの関数?
ゴールシークを画面操作をしなくて ゴールシーク機能を持つ 関数はありませんか?
無ければ 複合関数は? VBを使わないでEXCEL関数だけで 求める方法を探しています。

Aベストアンサー

こんにちは。

例えば、財務関数のNPVなどがありますが、ゴールシークの代わりに、関数だけで、オプションの循環参照計算があります。そうでなければ、基本的な話ですが、微分を使うか、もしくは、ミスが出やすいのですが、オートフィルで、目的の値を探すか、いずれかの方法があると思います。

ただ、VBというか、マクロのことだと思いますが、そういう区分けはあまり意味のないことだと思います。それは、アドインもピボットも、コマンドの3分の1程度は、動的なプログラムを使っているからです。また、分析ツールは完全にExcelの古いマクロです。

私は、マクロを中心とする回答者のひとりです。何かを使わないという条件付き質問は、学校のテストやクイズやお遊びとしてはありえるとしても、ゴールシークというものは、論理的な計算ではなく、反復する時系列な計算です。それは、基本的にマクロにほかなりません。ただし、私たちが考えるよりも、遥かに速い処理です。それを論理的な計算をするというなら、その求める具体的な質問がなければ、話は進みません。解答を求めたいなら、方法論は何でもアリではないかと思います。そうでないなら、純粋に数式で計算させるMathematica のようなもののほうが良いと思います。

こんにちは。

例えば、財務関数のNPVなどがありますが、ゴールシークの代わりに、関数だけで、オプションの循環参照計算があります。そうでなければ、基本的な話ですが、微分を使うか、もしくは、ミスが出やすいのですが、オートフィルで、目的の値を探すか、いずれかの方法があると思います。

ただ、VBというか、マクロのことだと思いますが、そういう区分けはあまり意味のないことだと思います。それは、アドインもピボットも、コマンドの3分の1程度は、動的なプログラムを使っているからです。また、分...続きを読む

QExcelで一つのシートに複数のリストを作成し、別のところにその集計表

Excelで一つのシートに複数のリストを作成し、別のところにその集計表を作成したいです。リスト(1)はA列に文字列(例えば社名とか)B列に数字、リスト(2)はD列に文字列E列に数字です。集計表は、G列に各リストの文字列を重複分を除いて抽出して表示させ、H列には数字(重複文字列の数字は合計します)が表示されるようにしたいです。どのようにしたらいいでしょうか?参考URLでもいいのでお願いします。

Aベストアンサー

そもそも、2つに分かれたリストのデータを集計するというのは効率的な運用でありません。

このような場合は、基本的に1つのリストにすることをお勧めします。

現在のリストで簡便に対応するなら、一方のリストの下にもう一方のリストをデータ追加に対応できるように空白列を設けてリンク貼り付けして(必要に応じてこの数式行を非表示にしておく)このリストで集計します。

この場合でも、重複のない文字列を関数で求める場合はかなり複雑な数式でタイプする必要があります。

たとえばA列にC列の文字列を追加した場合はH1セルに以下の式を入力して下方向にオートフィルすれば重複のないリストを作成することができます(2つのリストの境界に1行空白行が入る)。

=INDEX(A:A,SMALL(INDEX((MATCH(A$1:A$1000&"",A$1:A$1000&"",)<>ROW(A$1:A$1000))*1000+ROW(A$1:A$1000),),ROW(A1)))&""

I列の集計セルには以下のようなSUMIF関数を使ってください。

=IF(H2="","",SUMIF(A:A,H2,B:B))

そもそも、2つに分かれたリストのデータを集計するというのは効率的な運用でありません。

このような場合は、基本的に1つのリストにすることをお勧めします。

現在のリストで簡便に対応するなら、一方のリストの下にもう一方のリストをデータ追加に対応できるように空白列を設けてリンク貼り付けして(必要に応じてこの数式行を非表示にしておく)このリストで集計します。

この場合でも、重複のない文字列を関数で求める場合はかなり複雑な数式でタイプする必要があります。

たとえばA列にC列の文字列を追加...続きを読む

Qexcelのピボット関数

excelのピボット関数はどんな関数ですか?

Aベストアンサー

私自身は「ピボット関数」なる言葉を聞いたことがないけど、貴方はそれを何処で知ったのですか?
ひょっとして、[データベース関数]の中の =GETPIVOTDATA()関数のことでしょうか?
Excel のヘルプ文をお読みになったら如何でしょ。
>ピボットテーブル レポートに格納されているデータを返します。
>GETPIVOTDATA 関数を使用すると、ピボットテーブル レポートに
>表示されている集計データを取得することができます。
で始まる説明があります。
それを読んでから不明なところを質問されることをお奨めします。
何?隅から隅まで、チンプンカンプン?

Q集計表で集計結果が”0”の場合を印刷しないようにするには

複数の店舗の売り上げを売り上げ額を10000円ごとの段階にして、その段階ごとに店舗数を集計したのですが、段階によっては0のところが出てきます。印刷すると、その0がわずらわしくて見づらくなります。そこで、印刷時には、0は印刷されず空白になるようにしたいのですがどうすればできるでしょうか。また、その集計表を同じ段階で累計表に直したとき、もとの集計表のセルが0の時は、それに対応した累計表のセルでもそのセルの数字を印刷しないようにするにはどうすればいいでしょうか。

Aベストアンサー

ツール
オプション
表示で ゼロ値 のチェックを外すと 0 は表示されません。もちろん印刷もされません。


人気Q&Aランキング

おすすめ情報