このテーマ、とくに進捗があるわけじゃないのですが、Excelはプロプライエタリなソフトウェアなので使っていない方も多いでしょう。
Excelの代わりに無償で利用できるGoogleスプレッドシートでマクロを組んでみました。
データはこんな感じで用意します。前回のExcel版と同じ様式でもいいのですが変えてみました。

出来上がりはこんな感じ。
う~~ん、Excel版の結果と見比べると表現に制約がありますが、まあいいかな。無償ですし。

Google スプレッドシートの明らかな欠点は見栄えなどの表現に凝ると実行時間がかかること。
分単位ということはないですが、セルごとに色を設定したりするときいちいちAPIを呼び出さないといけなくてそこに時間を取られます。
名前や得点を書くところは配列に呼び込んで一気に吐き出してるのでそこはいいのですけど。
セルの書式も配列構造かポインタにして一気に書き戻せればいいのだけど、できるかなぁ?
ということでしたがとりあえずマクロを示しておきます。実行に関して責任は負いませんのであしからず。
function createScorePicts() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet1 = SpreadsheetApp.getActiveSheet();
/* add new spread sheet named ScorePict */
spreadsheet.insertSheet(1);
spreadsheet.getActiveSheet().setName('ScorePict');
var ScorePictsheet = SpreadsheetApp.getActiveSheet();
/* change column format, cell width and font color */
var j=0;
for(var i=0; i<5; i++) {
ScorePictsheet.setColumnWidth(j+2, 10); /* Server mark */
ScorePictsheet.setColumnWidth(j+3, 200); /* Player Name */
ScorePictsheet.setColumnWidth(j+4, 30); /* Game Count */
ScorePictsheet.setColumnWidth(j+5, 45); /* Game Score */
j=j+5;
}
ScorePictsheet.getRange("A:Z").setFontColor('#ffffff').setFontWeight('Bold').setFontSize(24);
ScorePictsheet.getRange('D:D').setHorizontalAlignment('center');
ScorePictsheet.getRange('I:I').setHorizontalAlignment('center');
ScorePictsheet.getRange('N:N').setHorizontalAlignment('center');
ScorePictsheet.getRange('S:S').setHorizontalAlignment('center');
ScorePictsheet.getRange('X:X').setHorizontalAlignment('center');
var row=1; /* start Row of data */
var acol=0;
var prow=0; /* start Row of ScorePict shet */
var pcol=0; /* start Column of ScorePict sheet */
var player1=sheet1.getRange(7,2).getValue();
var player2=sheet1.getRange(8,2).getValue();
var result=ScorePictsheet.getRange(2,3,200,25).getValues();
var Limit=0;
while(1) {
if(Limit++>200) { /* prevent forever loop, just in case no EOF mark */
break;
}
var dataArray=sheet1.getRange(row,4,row+4,22).getValues(); /* import score data to array */
if(dataArray[0][acol] == 'EOF') {
break;
}
if(dataArray[2][acol] == 1) {
ScorePictsheet.getRange(prow+2,pcol+2).setBackground('#ff0000'); /* Server Mark - Red color fill */
} else {
ScorePictsheet.getRange(prow+3,pcol+2).setBackground('#ff0000');
}
ScorePictsheet.getRange(prow+2,pcol+3,2,3).setBackground('#0000ff'); /* Blue Fill */
ScorePictsheet.getRange(prow+2,pcol+4,2,1).setBackground('#ff9900'); /* Orange Fill */
result[prow][pcol]=player1;
result[prow][pcol+1]=dataArray[3][acol]; /* Game Count 1 */
result[prow][pcol+2]=dataArray[0][acol]; /* Score 1 */
result[prow+1][pcol]=player2;
result[prow+1][pcol+1]=dataArray[4][acol]; /* Game Count 2 */
result[prow+1][pcol+2]=dataArray[1][acol]; /* Score 2 */
acol++;
if(acol>21) {
row+=6;
acol=0;
}
pcol=pcol+5;
if(pcol>23) {
prow+=3;
pcol=0;
}
} /* end of while loop */
ScorePictsheet.getRange(2,3,200,25).setValues(result);
};
※コメント投稿者のブログIDはブログ作成者のみに通知されます