• ベストアンサー

EXCELでこんなことはできますか?

1)EXCELで作成した図の情報を集計したい。   EXCELでフロアのレイアウト図を作るとします。   その時図は既に別シートに用意されています。図を作成する時には部品(机の絵やキャビネットの絵)のシートよりコピーなどで作図用のシートにコピーし、作成します。   作図のシートで部品をいくつつかっているかの集計を行いたいのですが、可能でしょうか?   集計用のシートに結果がでるのでもいいですし、作図のシートに集計ボタンをつくり押すと集計結果が作図シートにでるのでもどちらでもよいです。 2)作図の微調整   上記で作図した部品を範囲指定をして、ぴたりと隣接させるような機能はありませんか?手で行うと微妙にずれてしまいます。   位置あわせは、左端の部品に合わせるとか、指定ができるとありがたいのですが・・         宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> 記で作図した部品を範囲指定をして、ぴたりと隣接させるような機能はありませんか? こちらの方だけ。 「図形描画」のツールバーに「図形の調整」というメニューがあります。ここの 「位置合わせ」をクリックして、「図形」が選択されている状態にしてください。 図形の移動やサイズの変更が、隣接している図形の座標をベースにした動作に なります。

関連するQ&A

  • Excelで統合の機能を使いたい

    Excelで統合の機能を使ってデータを集計したいのです。 例えば、Aさんの売上表をsheet1に作成します。 売上表は、項目やセル位置に若干の違いはあるものの、 似たような作りの表なので、 Aさんのシートを元にして、シートコピーを行い、 コピーしたシートに、Bさんの売上表、Cさんの売上表を作成しました。 そして、集計するためのシートにて、統合を選択しました。 集計方法を「合計」、 統合元範囲をそれぞれ「Aさんのシートにある表範囲」 「Bさんのシートにある表範囲」「Cさんのシートにある表範囲」を追加し、 統合の基準で「上端行」「左端列」にチェックを入れ、OKを押しました。 しかしその結果、合計行が2つでてしまい、正しく集計が行えませんでした。 どこか、やり方が間違っているのでしょうか? 試しに、シートコピーを行わないで各シートごとに表を1から作成し、 統合を実行したところ、ちゃんと合計行も1つで、正しい集計結果が得られました。 もしかして、統合の時には、表をコピーしてはいけないのでしょうか? 以前にも、1から表を作った場合と、シートコピーをした場合とで、 集計結果に、「項目の並び順の違い」がでたことはあったのですが、 そのときは並び順だけが違い、集計結果はあっていたので、 特に気にしていませんでした。 なぜ、こういう結果になってしまうのか、 どなたか、ご存知の方いらっしゃいましたら、 アドバイスいただけたらと思います。 よろしくお願いします。

  • Excelで行を挿入しても移動しない方法

    Excelで行を挿入しても関数の指定値が移動しない方法はありますでしょうか? SkyDriveのexcel web appでアンケートと作って使っていたんですが、途中で別のシートに入力されてきたものを様々な関数をつかって見やすく集計しました。 しかし、新しい集計結果はどうも挿入されているらしく、せっかく新しい集計結果が入ってもうまく集計されません。 具体的にはシート1のA3の文字列をシート2から検索しシート3のA3に表示させる。それをA4、A5とコピー100くらいまでコピーしておく。 さらにその中から最頻値をA1に返す。 というのをつくったのですがこの時入力はシート1のA10ほどまでしかしてなかったのです。でそれ以下は式がエラーを返している状態なので値がシート1に入力されていけばうまく行くのですが、新しい結果はシート1のA11に挿入されるようでシート3のA11はシート1に挿入後はA12を指定してしまっているので集計結果に合算してくれないのです。 うまい解決方法はございませんでしょうか。

  • エクセルのマクロで複数のシートのコピー

    エクセル初心者です。 私の場合、3から5社のフォルダが作ってあり、それぞれ、エクセルで、日々の入出庫の管理&集計をしています。 3社のフォルダより、指定ファイル・シート内のデータをピボットテーブル用集計シートにコピー貼り付けしたいのです。 ピボットテーブル機能で複数のシートを選択するのはシート数が多すぎて手間。 マクロによって、集計シートにまとめてから、ピボットテーブル機能を使いたい。 各社シートのフォームは同じ.。 日付けを指定してコピー貼り付けしたい。 集計シートに各社連続で貼り付けがしたい。 集計シートの最初の行だけにタイトルを表示したい。 なるべく、フォームの行・列幅は変更しないようにしたい。 貼り付けたデータのユーザー名がわかるようにしたい。 なにとぞ、お力をお貸しください。 よろしくお願いいたします。 エクセル2003

  • エクセルで集計を作成

    エクセルで集計を作成してるのですが、シート1の内容を シート2,3,4,5と同じ内容をコピー貼り付けしないでシート1に入力した内容がそのまま自動的に書き込めるにはどのようにすればいいのでしょうか? Σだと数字は表示してくれるのですが どなたか教えて下さい。

  • エクセルの集計

    エクセルの機能で集計を実行後に出る結果を他のシートにコピーをしたのですが、すべてのレベルがコピーされてしまいます。出来れが合計のみの結果をコピーしたいのです。一度コピーをして、一旦ブックを閉じて後で貼り付けをするという手順ですれば出来るのですが、わざわざ閉じるのは面倒臭いので・・・。いい方法があればお願い致します。

  • EXCEL(マクロ機能あり)のコピー

    お世話になります。 現在、マクロ機能のあるEXCELファイルを別のPCへコピーし実行すると 思うような結果が返ってこない。 Sheetが2つあり、 ・Sheet1はDBより取得 ・Sheet2はSheet1を参照し集計 というように構成しています。 自分のPCでは全て問題なく実行できるが、 別のPCではSheet1のデータ取得は実行でき、Sheet2の参照集計ができない。 という点で悩んでいます。 お力添えをお願いいたします。 考えられる問題点は、 1.ファイルの作成時にマクロ機能を別のEXCELファイルよりコピー(ボタンの機能など)し、マクロの登録を行ったので参照がうまくいっていない。 2.マクロのコピーの仕方が正しくない 3.Excelファイルに何か設定をしなければならない(参照設定など) と考え調べていたのですが、解決に至りませんでした。 どなたかご教授をお願いいたします。

  • excelでのデータ集計

    エクセルで、合計を出すために、データ集計を使いました。 それを別のシートにコピーすると、集計された行だけを貼り付けたいのに、集計もとの、合計の行以外の行もコピーされてしまします。 集計した行だけを抽出し別シートにコピーしたいのですが、できますか?

  • EXCELでシート名をセルの内容で指定出来るか

    検索してみましたが、探し方が悪いのか該当する質問がないようなので、質問させていただきます。 EXCELで複数のシートにあるデータを使用して集計表を作成するときの質問です。 使用する人がEXCELに慣れていない方のため、汎用性を持たせたいのですが、以下のような方法は出来るのでしょうか。 集計元シート(複数)> '1','2','3'…のように連番のシート名 集計先シート>'集計' 1.'集計'シートのセル A列 にシート名を入力します。 2.'集計'シートのセル B列 にそれぞれのシートの合計部分のセルNo(Ex.B11)を指定します こうしたとき、2.のB列 は [ B1 = '1'!B11 ]のようになりますが、この '1' の部分で '集計'シートの A1 の値を反映したいのです。 こうすると、シートが増えたとしても、上の式をコピーすれば(ドラッグでのコピー)式のシート名を変更する必要がないと思うのですが…。 ですが、思いつく方法を試してみてもどうもうまくはいきません。 本当にこういった方法は出来るのか、出来るのならその方法をご教授いただければありがたいです。 説明ベタで申し訳ありません。 これが出来るといろいろなものがうまくいくので、ぜひよろしくお願い致します。 (VBAはなるべく使わない方向でお願いします)

  • エクセルVBAに関しての質問です。

    エクセルVBAに関しての質問です。 同じフォルダ内に同形式のエクセルファイルが複数あります。そのファイルの特定のシートの中の特定の列のみをコピーして並べたいと思っています。 (1)フォルダはUSBに入れて使ったり、複数のパソコンの中で使われるので特定の場所にあるとは限りません。 (2)フォルダ名はその年度に応じて変更されます。「2009」、「2010」・・・といった具合です。 (3)フォルダ内のファイル数は常に3つで、「記録集計第1期」「記録集計第2期」「記録集計第3期」と名前を付けています。 (4)3つのファイル全てに「結果」という名前のシートがあり、そのシートのC4~AU37までのセルをコピーしたいです。 (5)C4~AU37までのセルには数値では無く、IF関数を使用して出された「◎」「◯」「△」等の文字列が入っています。 (6)コピーしたセルを「記録集計第3期」ファイルの中の「年度末結果」というシートのC2以降に並べてコピーしたいです。ただし、コピーする際に4行ずつ飛ばしてコピーしたいです。 「記録集計第1期」のC4を「年度末結果」のC2へ、C5をC6へ...... 「記録集計第2期」のC4を「年度末結果」のC3へ、C5をC7へ...... 「記録集計第3期」のC4を「年度末結果」のC4へ、C5をC8へ...... といった具合です。 このコピーにより、C2から始まって、C2=記録集計第1期のC4、C3=記録集計第2期のC4、 C4=記録集計第3期のC4ときて、年度末結果のC5には空白の列ができます。 そして、C6からまた続く訳です。 ややこしくてすみません。 (7)作業手順としては、「記録集計第3期」のファイルだけを開き、その中の「年度末結果」のシートにボタンを作って上記のVBAを動かせたらと思っています。 (8)「記録集計第1期」「記録集計第2期」のファイルは開かずにデータをコピーしたいです。 勝手なお願いで申し訳ございませんが、 お時間がございましたら、よろしくお願いいたします。

  • エクセルの集計について

    こんにちは。 知恵をお貸しください。 現在職場でエクセルの集計シートを作成しています。 以下のような内容です。 -------------------------------------------------- (1)入力画面(シート1) いくつかの項目について検体数を入力する。毎日行います。 (2)集計結果(シート2) シート1の項目・検体数に応じて集計。 (3)日表(シート3) シート2の結果を日にちごとに貼り付ける。 実行ボタンなどを使用したい。 ※入力者は皆パソコン初心者なので、 (1)の検体数入力と(3)の実行ボタンを押すだけにしたいです。 -------------------------------------------------- (1)、(2)までは完成したのですが、 (3)の作業を作成できません。 (1)はドロップダウンリストから選択させ、 (2)はSUMIFで集計したものです。 (3)ではマクロで貼り付けの操作を組めば良いのですか? 日にちごとというのが難しく、身動きが取れません。 説明が下手で申し訳ありませんが、 ご教授願います。 よろしくお願いします。

専門家に質問してみよう