たっぴ(パソコン質問掲示板)

ログイン

メニュー
■ トップ
■ 質問する
■ 回答を見る・回答する
■ 参加者のひろば / テーマ別
■ コミュニケーション道場
■ 「たっぴ」の使い方
■ 「たっぴ」のルール・心得

エキスパート トータルランキング
Rank ニックネーム E-Point
1 位 sriver 1372 p
2 位 げんき(^^)/ 810 p
3 位 うにゅ 607 p
4 位 mory 512 p
5 位 saru 510 p
6 位 Clark 481 p
7 位 taknt 474 p
8 位 459 p
9 位 あき◆ 387 p
10 位 おやぢ 366 p
※月間ランキング参加者がありませんでした。



E-Point還元プログラム
E-Point 月間獲得ポイントより回答者様へ現金を還元いたします。

対象還元金額
全員に(E-Point)×20円
支払いは5,000円以上からとなります。
還元金の支払いはご指定銀行口座への振込みとなります。

『マナーの良い質問者』マーク
以下の条件を満たす質問者様には
  『マナーの良い質問者』マーク

が付きます。
  1. 登録していて
  2. 「終了」していない質問がひとつ以下で
  3. 終了した質問で「○○○○○」という言葉の投稿がある
3番目の条件はひらがなです。もうお判りですね。(漢字、カタカナもOKかも。。。)
ぜひマークをGetしてください。









《戻る

No.質問・回答おれい
[100712] 超〜初心者! マクロが作りたい。難しい質問ですいません。 10 p
OS: Windows XP
ソフトウェア名/バージョン:Microsoft Excel 
ハード機種名/型番:
エラーメッセージなど:
その他:

初めまして。よろしくお願いします。
 さて、初めての質問になりますが内容が難しくてすいません。
 以下のようなマクロが作りたいのですが、複雑すぎてわかりません。何とか作ろうと頑張ってますがなかなかうまくいきません。一言だけでも構いませんので 助けて下さい。

 あらかじめ指定したセルに、以下に示す法則に従った「特殊な値」を入力すると、以下に示す法則に従って、オートシェープの四角形が配置されるマクロを作りたい。

  ・あらかじめ指定したセルの書式設定で、表示形式は「文字列」で、特殊な値は半角で入力する。
  ・01 02 03 … 30 と書かれた図形の下に、次の法則に従ってオートシェープの四角を配置する。
    ○特殊な値として「11+09」と入力した場合、01 02 03 …の間は、01 01+01 01+02 01+03 … 01+19 02 …のような感じであり、よって、11+09は11と12の間でさらに、11+08と11+10の間となる。
  ・指定した所に、オートシェープの四角形の左側を合わせる。
  ・特殊な値に関して、-もとり得る(11+09=12-11)
  ・例えば、オートシェープの四角形の左側を03に合わせたい場合の特殊な値は、03+00と入力する。

 以上が質問です。条件が色々あって非常に面倒だとは思いますが、ご協力お願いします。  
abcd535マナーの良い質問者です。   2007年11月6日03:20


 
[100722] サンプルを提示してください。
花鳥風月 (未登録)   2007年11月6日13:14


[100756] 仕様として不明な点があります。

> 01 02 03 … 30 と書かれた図形の下に
文字が入っているのは図形ではなくセルですよね。

> 11+09=12-11
意味が不明です。

オートシェイプの座標がどのように決まるのか不明です。セルの座標、aa+bb それぞれの数字が四角の位置にどのように使われるかが明確ではありません。

文字の入ったセルは並んでいるのでしょうか。それとも場所はばらばらなのでしょうか。

どーん (15)    2007年11月7日11:13


[100759] んっと・・・こう言う事かな?

オートシェイプで30個の図形を配置して・・・
01+00〜01+19(最大20)として・・・表記上きついのて
01+00〜01+05とさせてもらうと

[  1  ][  2  ][  3  ]
[01+00]
 [01+01]
  [01+02]
   [01+03]
    [01+04]
     [01+05]
      [02+00]
       [02+01]
        [02+02]
         [02+03]
          [02+04]
           [02+05]
            [03+00]
           [03-01]
          [03-02]
         [03-03]
        [03-04]
       [03-05]
      [02-00]
     [02-01]
    [02-02]
   [02-03]
  [02-04]
 [02-05]
[01-00]

こんな感じでしょうか?
(掲示板の書き込み使い慣れてなくてズレてたらごめんなさい)

方法は考えど、かなり複雑そうです。
ヒントになるかわかりませんが・・・

01+01といれるセルの横にボタンを1つ用意して
 ・特定の名前のシェイプを削除
 ・特定の名前のシェイプを指定座標で作成
というマクロを登録すればいけそうです。

01シェイプの位置に20セル固めてるとかなら簡単そうですが
1セル内でとなるとけっこう頭を悩ませる必要が出てきます。
 ・シェイプの削除
 ・指定座標に作成
 ・指定座標のセル内の指定位置へ移動

セル内の指定位置への移動方法は・・・
http://www.vbalab.net/vbaqa/c-board.cgi ?cmd=one;no=50404;id=excel
らへんを参考にするといいかもです。
ちょっと試してみてサクっと作れなかったので時間的ギブアップです><
すいません。
熱中症 (125)    2007年11月7日13:44


[100863] >花鳥風月さん
 回答ありがとうございます。サンプルとはどんなものでしょうか?


>どーんさん
 回答ありがとうございます。

  01 02 03 … 30 と書かれた図形の下に
   microsoft excelで、一つ目ののセルに01、タブキーを押して02、と言
う具合に入力していって、30まで入力し、それすべてをコピーし、microsoft
pawerpointに貼り付け、それを「図として保存」で保存し、それをmicrosoft
excelに貼り付け、任意に拡大縮小したものです。

  11+09=12-11
   言い換えると、11+09と11+10との間がどれだけ離れているか
を調べる方法が知りたいです。


>熱中症さん
 回答ありがとうございます。
 折角頑張っていただいたのに申し訳ありません。この発言で述べているように、
  01 02 03 … 30 と書かれた図形・・・
    microsoft excelで、一つ目ののセルに01、タブキーを押して02、と言
   う具合に入力していって、30まで入力し、それすべてをコピーし、microsoft
   pawerpointに貼り付け、それを「図として保存」で保存し、それをmicrosoft
   excelに貼り付け、任意に拡大縮小したもの
です。
abcd535マナーの良い質問者です。   2007年11月10日17:12


[100892] 補足いただいた内容がさらに不明なのですが、、、(^^;)
・01 02 ... はセルに横へ並んでいる。
・オートシェイプ四角のテキストに 11+09 などの位置の指定が入っている。
という情報で次のように理解しましたが良かったでしょうか。

・テキストに a+b または a-b と入ったオートシェイプ四角がいくつかある。
・a-b は (a-1)+(20-b)と同じ。※括弧の中は計算
・セルA1からAD1にそれぞれ 01 02 03 ... 30 が入っている。
・オートシェイプの左上の位置を a+b に基づき配置する。
  縦位置: (aの入ったセルの下)
  横位置: (aの入ったセルの左)+(aの入ったセルの幅)*b/20

Sub Macro1()
    Dim s As Shape    'オートシェイプ
    Dim str As String 'テキスト a+b ※a,b共2桁
    Dim a As Integer
    Dim b As Integer
    Dim cel As Range    'aの入ったセル
    For Each s In Shapes
        str = Shapes(s.Name).TextFrame.Characters.Text
        a = Val(Mid(str, 1, 2))
        b = Val(Mid(str, 3))
        If b < 0 Then
            a = a - 1
            b = 20 + b
        End If
        Set cel = Cells(1, a)
        s.Top = cel.Top + cel.Height
        s.Left = cel.Left + cel.Width * b / 20
    Next
End Sub


どーん (15)    2007年11月11日01:43


[100896] >どーんさん
 回答ありがとうございます。説明不十分ですいません。
 
  ・01 02 ... はセルに横へ並んでいる
    microsoft excelで、一つ目ののセルに01、タブキーを押して02、と言
   う具合に入力していって、30まで入力し、それすべてをコピーし、microsoft
   pawerpointに貼り付け、それを「図として保存」で保存し、それをmicrosoft
   excelに貼り付け、任意に拡大縮小したものです。

  ・オートシェイプ四角のテキストに 11+09 などの位置の指定が入っている
    01 02・・・というのは、言い換えればものさしのようなもので、01cmと02cmの間を20等分して01+01cm、01+02cm、・・・、01+19cm、02cmと考えて下さい。これと「01 02 ... はセルに横へ並んでいる」で対象としているのは同様の図です。
 
 
abcd535マナーの良い質問者です。   2007年11月11日02:58


[100933] 01 02 ... 30 は図形ですね。了解しました。余白の無い図形として、マクロでは30等分して位置を決めています。

Sub Macro1()
    Dim s As Shape    'オートシェイプ
    Dim str As String 'テキスト a+b ※a,b共2桁
    Dim a As Integer
    Dim b As Integer
    
    Dim scpic As Shape 'めもり図形
    Set scpic = Shapes("めもり")
    For Each s In Shapes
        If s.Type = msoAutoShape Then
            str = Shapes(s.Name).TextFrame.Characters.Text
            a = Val(Mid(str, 1, 2))
            b = Val(Mid(str, 3))
            If b < 0 Then
                a = a - 1
                b = 20 + b
            End If
            s.Top = scpic.Top + scpic.Height
            s.Left = scpic.Left + scpic.Width / 30 * (a - 1 + b / 20)
        End If
    Next
End Sub

01 02 ... 03 の図形に「めもり」という名前を付けてください。マクロの中で名前「めもり」で図形を取得しています。名前を付ける方法は、図形を選択し、上の数式を入力する欄の左側で名前「めもり」を入力します。

「03+00」はオートシェイプ四角のテキストでいいんですよね?

どーん (15)    2007年11月12日11:33


[100954] >どーんさん
 回答ありがとうございます。私のためにここまでして頂き、何とお礼を申し上げれば良いか。誠にありがとうございます。ご紹介頂いたプログラムを実行したところ、
  「shapes」において、コンパイルエラー SubまたはFunctionが定義されていません。
  と表示され、プログラムが止まってしまいます。

   
   「03+00」はオートシェイプ四角のテキストでいいんですよね?
     説明不足で申し訳ありません。
     03+00 は、セルに入力した文字列です。


    01 02 ... 03 の図形
     それを作成する方法は、microsoft excelで、一つ目ののセルに01、タブキーを押して02、と言う具合に入力していって、30まで入力し、それすべてをコピーし、microsoft pawerpointに貼り付け、それを「図として保存」で保存し、それをmicrosoft excelに貼り付け、任意に拡大縮小したものです。



    「01 02 ... 03 の図形」をものさしと考え、何も書いてないオートシェープの四角の左端を、ものさしの下に配置する。配置する位置は、「03+00」のようにセルに文字列で入力してその値に対応したものさしの値のところの下とします。ものさしとセルに入力する文字列との対応は以下のようとします。

       01 01+01 01+02 … 01+19 02 …30


説明不足となってしまうことをお許し下さい。
abcd535マナーの良い質問者です。   2007年11月12日21:49


[100963] > ご紹介頂いたプログラムを実行したところ、
>   「shapes」において、コンパイルエラー SubまたはFunctionが定義されていません。
>   と表示され、プログラムが止まってしまいます。

マクロ(VBA関数)はシートのコードに配置してください。標準モジュールでは動作しません。シートの関数としてのみ動作します。

エクセルのメニュー[ツール][マクロ][Visual Basic Editor]でエディタを開くと、プロジェクトというツリー表示にシートが表示されていると思います。図形やオートシェイプがあるシートをダブルクリックすると、シートのコードが開きます。


サンプルはエッセンスが紹介されたのみです。読み解いて理解しなければマクロは作れません。がんばってください。

どーん (15)    2007年11月13日09:55


[101011] >どーん
 御親切にありがとうございます。頑張って理解します。
abcd535マナーの良い質問者です。   2007年11月14日22:08


( 参照数:3558   日平均:0.6 )
 
〜 回答の受付を終了しました 〜


回答、お礼・報告などメッセージの追加

ニックネーム:

まったく新しい内容の質問、質問者以外の方の質問は、メニューの「質問する」から新たに質問してください。

詳細: 内容を詳しく言うと。。。

※「たっぴ」に登録すると質問にポイントが付けられます。 その他便利な機能も使えます!》新規登録 》Help

※http://.....は自動的にハイパーリンクに変換します。
※<pre></pre>が使用できます。     ※引用は行の先頭に「>」を付けてください。自動的に色が付きます。




利用規約 特定商取引に関する法律に基づく表記 プライバシーポリシー 問合せ