ITservice雄飛 プロモーションビデオ

2020年7月31日金曜日

ExcelVBAでShapes(画像)が所属するセルのRowを取得する

ITservice雄飛です。

ほんとにお久しぶりの投稿です。
今回は、Excel VBAを。

今、オブジェクト(シート上に貼り付けられた画像)のRowsを取得する関数を探していたんですが。

どうも、昔はあった様だけれども、現在は廃止になっている様で、無情にエラーが返って終了しました。

色々考えた末、セルのサイズも取得できること考えたら、それアルゴリズムに落とせば良いだけじゃん、、、という、一般的且つ、ごく普通の考えに至りました。

で、思いついたら即実装。
簡単ですね、WhileとIFと変数の加算減算だけなので。
例ではRowですが、取得する値を幾つか変えれば、Colにも対応可能ですね。

本番はLazarus(Pascal)からComObjで呼び出すので、これからそれを組みますが。

まぁ、消すには勿体ないので、ブログ記事にしました。
以下、こんな感じ、即興のテスト関数です。

※このサンプル関数では事前に、オブジェクト(Shapes)を選択(Select)している必要があります。


Function Return_Sharp_Rows(start_i As Long, end_i As Long) As Long

  Dim tp As Long '選択したオブジェクトのTop座標を格納
  Dim rw As Long 'RowsのTopの合計値を格納
  Dim rw2 As Long 'RowsのHeightの合計値を格納
  Dim i_1 As Long 'While開始位置
  Dim i_2 As Long 'While終了位置
  
  tp = Selection.ShapeRange.Top '選択されたオブジェクトのTop座標を取得
  rw = 0 'Row.Topsを初期化
  rw2 = 0 'Row.Heightsを初期化
  i_1 = start_i '開始位置を引数から代入
  i_2 = end_i '終了位置を引数から代入
  Return_Sharp_Rows = -1 '検索にヒットしなかった場合の暫定値設定
  While i_1 < i_2 'While文開始
   rw = rw + Cells(i_1, 1).Top  'Row.Topsを代入
   rw2 = rw2 + Cells(i_1, 1).Height  'Row.Heightsを代入
   If ((rw <= tp) And (rw2 >= tp)) Or (rw = tp) Then 'オブジェクトの座標をセルの数値と比較し検証する
     Return_Sharp_Rows = i_1 '一致した場合、戻り値にセルのRow(i_1)を代入
     i_2 = i_1 '開始位置と終了位置を同一にし、While文を終了させる
   End If
   i_1 = i_1 + 1 'Rowを一つ下に移す(i_1を加算する)
  Wend
End Function

呼び出すときはこうします。例です。
Sub Get_Shapes_CellRow()
 Dim i As Integer
 i = Return_Sharp_Rows(1, 20)
 MsgBox Str(i)
End Sub

以上。
Excelって便利ですね。

自己紹介

デスクトップアプリケーション、ホームページなどの製作承ります。


ご挨拶


初めまして、本ページにアクセスいただきありがとうございます。


コンピュータが本格的な社会インフラとなり、すでに20年近い月日が経っております。

私が初めてコンピュータに触れたのは、1994年の18歳頃の時で、インターネットがまだ身近ではない状態のころでした。


それからは目まぐるしくコンピュータはソフトハードともに著しく発展し、Windows95の登場とともに、世界中がひとつのコミュニケーション手段でつながるインターネットと言うインフラ基盤が登場しました。


今となっては当時のコンピューターは、今のスマートフォンはおろか、ガラケーと呼ばれるフィーチャーフォンの処理能力にすら、及ばなかったと思います。


それから25年、様々のコンピューター言語、様々な OS、 様々なソフトウェアやミドルウェア が登場し、日進月歩著しい成長を遂げたのは、知る人ぞ知るところだと思います。



しかし、急激な発展を遂げるその裏では、 IT インフラの活用についていけず、情報弱者と呼ばれる、 ITインフラから大きく遅れをとる人々を生み出したのも、また事実かと思います。


この25年でコンピューターや携帯可能な情報端末、つまりフィーチャーフォンやスマートフォン、タブレット等は大きく成長し、日々、猛烈な成長を遂げ多彩な端末を生み出しております 。


では、それらが操作性に優れ、万人全てが扱える道具かと言うと、決してそうではありません。


メーカーや端末ごとによって、多少の共通性こそあれ、操作方法は皆バラバラで、 

ある程度の慣れと端末への学習がなければ、使いこなすのが難しいのが、今の現状だと思います。


言い換えれば、コンピューターはまだまだ未熟で、発展途上の産物だと思うのです。



しかしその一方で、それら情報端末には、未知数の可能性があるとも考えています。


ソフトウェア(ソフト)やアプリケーション(アプリ)を導入することにより、

安易に機能拡張することができる一方、特定の目的に特化したソフトやアプリを作れば、

目的や不便を解決するための効率的な便利なツールになり得るのです。


ソフトウェアやアプリケーションの製作は頭脳と体力との勝負であり、

作業も決して、安易だったり容易なものでもありません。


しかし、目的をきちんと理解し、設計し開発をすることにより、

パソコンや携帯可能な情報端末を、魔法の道具箱のように、

何百何千行の文章書類を加工したり、計算したりする事ができます。


そしてそれらは良く、オーダーメイドスーツのようなものに例えられます。


それを実現するのが、私たちプログラマの使命だと信じて疑いません。

また、その知識をお裾分けし、お伝えするのも使命のひとつだと信じております。



オーダーメードで、既製品にはない、かゆいところに手が届く商品をお作りします。


 ITservice雄飛

代表 脇保 雄飛


経歴

1976年生まれ

1995年3月高校卒

1995年4月有限会三余 入社

2001年11月WindsGrageRacingSchool

(モータースポーツ競技学校)入校 

2011年3月有限会社三余 退社

2011年4月千葉商科大学入学

2014年6月屋号雄飛(ITservice雄飛)起業届提出

2016年3月 常駐型派遣業務に従事

2016年4月千葉商科大学 卒業

2019年11月 有限会社三余 社内SEとして従事 


保有資格

2012年6月

コミュニケーション基本スキル認定 取得

2012年7月

営業基本スキル認定 取得

2013年12月

ホスピタリティ基本スキル認定 取得



自己紹介

高校卒業後、仕事の傍ら独学で、コンピュータ全般知識とプログラミング習得に励む

2001年に四輪モータースポーツの登竜門 FJ 1600つくば地方選手権出場を目指し、

WindsGrageドライバーズオーディションに参加。

WindsGrageRacingSchoolに、 「優秀C」 で合格し、入学する。

2001年から2008年まで、仕事の傍らモータースポーツに励む。

練習中の事故や病気などが重なり、2008年に引退。


不動産賃貸リフォーム関係の業務に携わる傍ら、

社内効率化の仕組みを、 delphiにて独学 で構築する。


2009年には持病の関係から免許証を返納、車の運転ができなくなる。

2011年、 IT 関係と営業関係の技能を身につけるべく、私立系商科大学に社会人で入学する。


モータースポーツ活動で養った活動力を武器に、学部を越えて多岐にわたる講義を受ける。

学費を稼ぐためにソフトウェア開発のアルバイトを 営業活動の末に受託開発業務を行う。

2014年には起業届を出し、 営業活動の末に顧客を獲得、幾度かに渡って受託開発を行う。

学費の捻出と体調不良のため一年休学するも、 その間を利用し、

卒論として1万5千ステップの多目的コードエディタの開発を開発実験として行う。


2016年3月に、中途採用枠で、 就職と受託業務契約の仕事を探し、同月に常駐型派遣業務に従事する。


同年4月に大学を卒業、そのまま個人事業主として受託開発と常駐業務を行う。


2017年から18年にかけて幾度かに渡って体調不良を引き起こす。

2019年、療養に努めながら、古巣の会社に戻り、社内 SE として勤務する。


2020年より受託開発を再開、現在に至る。



使用言語

Delphi及びLazarus(Pascal言語)

VB系言語(主に、VBA、VBS)

HTML+Css3+JavaScript

PHP

Python 

(得意順。主に使用するもののみを列挙。)


開発手法

ウォーターフォール型開発経験: 3年

アジャイル型開発経験:9年

独学期間を含めた全ての開発経験:15~20年

主要 取り扱い商品

VBAによる手作業処理の自動化プログラム作成

(Excelマクロ)

手作業処理の 自動化プログラム作成

(ComObjを用いた、VBAを外部アプリケーションからの呼び出しによる)

デスクトップアプリケーション作成(※上記との連携含む場合あり)

(Delphi、Lazarus、C#等の開発言語による)

ホームページ作成

(WordPress+レンタルサーバによる)

初歩的なマンツーマンパソコン教室(現在はリモートのみ)

教育用言語を用いたマンツーマンプログラミング教室(現在はリモートのみ)